{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DAY12 窗口函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# install required libraries if necessary\n",
    "# pip install matplotlib pandas ffn\n",
    "\n",
    "import datetime\n",
    "import random\n",
    "\n",
    "import ffn\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import tushare as ts\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>ticker</th>\n",
       "      <th>closing_price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>2022-05-24</td>\n",
       "      <td>tsla</td>\n",
       "      <td>628.159973</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>133</th>\n",
       "      <td>2022-07-14</td>\n",
       "      <td>tsla</td>\n",
       "      <td>714.940002</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>316</th>\n",
       "      <td>2022-02-08</td>\n",
       "      <td>nflx</td>\n",
       "      <td>403.529999</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>409</th>\n",
       "      <td>2022-06-23</td>\n",
       "      <td>nflx</td>\n",
       "      <td>181.710007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>702</th>\n",
       "      <td>2022-06-28</td>\n",
       "      <td>addyy</td>\n",
       "      <td>88.559998</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Date ticker  closing_price\n",
       "99  2022-05-24   tsla     628.159973\n",
       "133 2022-07-14   tsla     714.940002\n",
       "316 2022-02-08   nflx     403.529999\n",
       "409 2022-06-23   nflx     181.710007\n",
       "702 2022-06-28  addyy      88.559998"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tickers = 'tsla,spot,nflx,nke,addyy'.split(',')\n",
    "\n",
    "# get stock price data\n",
    "prices = ffn.get(tickers, start=\"2022-01-01\")\n",
    "\n",
    "# convert data into 'long' table format for purposes of this exercise\n",
    "prices = prices.melt(ignore_index=False, var_name=\"ticker\", value_name=\"closing_price\")\n",
    "\n",
    "# reset index to make 'Date' a column\n",
    "prices = prices.reset_index()\n",
    "\n",
    "# display 5 example rows in the dataset\n",
    "prices.sample(5).sort_index()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sqlite3\n",
    "\n",
    "# create connection to in memory sqlite db\n",
    "with sqlite3.connect(\":memory:\") as conn:\n",
    "\n",
    "    # save prices dataframe to sqlite db\n",
    "    prices.to_sql(name=\"prices\", con=conn, index=False)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "ex1_sql_query = \"\"\"\n",
    "SELECT\n",
    "    date(Date) as Date\n",
    "    , ticker\n",
    "    , closing_price\n",
    "    , MAX(closing_price) OVER(PARTITION BY ticker) as max_price\n",
    "FROM\n",
    "    prices\n",
    "ORDER BY 2 DESC\n",
    "\"\"\"\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>ticker</th>\n",
       "      <th>closing_price</th>\n",
       "      <th>max_price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-12-31</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1056.780029</td>\n",
       "      <td>1199.780029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2022-01-03</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1199.780029</td>\n",
       "      <td>1199.780029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2022-01-04</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1149.589966</td>\n",
       "      <td>1199.780029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2022-01-05</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1088.119995</td>\n",
       "      <td>1199.780029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2022-01-06</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1064.699951</td>\n",
       "      <td>1199.780029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>720</th>\n",
       "      <td>2022-07-25</td>\n",
       "      <td>addyy</td>\n",
       "      <td>90.019997</td>\n",
       "      <td>144.263733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>721</th>\n",
       "      <td>2022-07-26</td>\n",
       "      <td>addyy</td>\n",
       "      <td>83.650002</td>\n",
       "      <td>144.263733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>722</th>\n",
       "      <td>2022-07-27</td>\n",
       "      <td>addyy</td>\n",
       "      <td>83.330002</td>\n",
       "      <td>144.263733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>723</th>\n",
       "      <td>2022-07-28</td>\n",
       "      <td>addyy</td>\n",
       "      <td>85.300003</td>\n",
       "      <td>144.263733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>724</th>\n",
       "      <td>2022-07-29</td>\n",
       "      <td>addyy</td>\n",
       "      <td>86.139999</td>\n",
       "      <td>144.263733</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>725 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           Date ticker  closing_price    max_price\n",
       "0    2021-12-31   tsla    1056.780029  1199.780029\n",
       "1    2022-01-03   tsla    1199.780029  1199.780029\n",
       "2    2022-01-04   tsla    1149.589966  1199.780029\n",
       "3    2022-01-05   tsla    1088.119995  1199.780029\n",
       "4    2022-01-06   tsla    1064.699951  1199.780029\n",
       "..          ...    ...            ...          ...\n",
       "720  2022-07-25  addyy      90.019997   144.263733\n",
       "721  2022-07-26  addyy      83.650002   144.263733\n",
       "722  2022-07-27  addyy      83.330002   144.263733\n",
       "723  2022-07-28  addyy      85.300003   144.263733\n",
       "724  2022-07-29  addyy      86.139999   144.263733\n",
       "\n",
       "[725 rows x 4 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# use pandas read_sql to execute the query and return a dataframe\n",
    "ex1_sql = pd.read_sql(ex1_sql_query, con=conn)\n",
    "ex1_sql\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>ticker</th>\n",
       "      <th>closing_price</th>\n",
       "      <th>max_price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-12-31</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1056.780029</td>\n",
       "      <td>1199.780029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2022-01-03</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1199.780029</td>\n",
       "      <td>1199.780029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2022-01-04</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1149.589966</td>\n",
       "      <td>1199.780029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2022-01-05</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1088.119995</td>\n",
       "      <td>1199.780029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2022-01-06</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1064.699951</td>\n",
       "      <td>1199.780029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>720</th>\n",
       "      <td>2022-07-25</td>\n",
       "      <td>addyy</td>\n",
       "      <td>90.019997</td>\n",
       "      <td>144.263733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>721</th>\n",
       "      <td>2022-07-26</td>\n",
       "      <td>addyy</td>\n",
       "      <td>83.650002</td>\n",
       "      <td>144.263733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>722</th>\n",
       "      <td>2022-07-27</td>\n",
       "      <td>addyy</td>\n",
       "      <td>83.330002</td>\n",
       "      <td>144.263733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>723</th>\n",
       "      <td>2022-07-28</td>\n",
       "      <td>addyy</td>\n",
       "      <td>85.300003</td>\n",
       "      <td>144.263733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>724</th>\n",
       "      <td>2022-07-29</td>\n",
       "      <td>addyy</td>\n",
       "      <td>86.139999</td>\n",
       "      <td>144.263733</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>725 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          Date ticker  closing_price    max_price\n",
       "0   2021-12-31   tsla    1056.780029  1199.780029\n",
       "1   2022-01-03   tsla    1199.780029  1199.780029\n",
       "2   2022-01-04   tsla    1149.589966  1199.780029\n",
       "3   2022-01-05   tsla    1088.119995  1199.780029\n",
       "4   2022-01-06   tsla    1064.699951  1199.780029\n",
       "..         ...    ...            ...          ...\n",
       "720 2022-07-25  addyy      90.019997   144.263733\n",
       "721 2022-07-26  addyy      83.650002   144.263733\n",
       "722 2022-07-27  addyy      83.330002   144.263733\n",
       "723 2022-07-28  addyy      85.300003   144.263733\n",
       "724 2022-07-29  addyy      86.139999   144.263733\n",
       "\n",
       "[725 rows x 4 columns]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# copy dataframe to avoid overwritting original (optional)\n",
    "ex1_pandas = prices.copy()\n",
    "\n",
    "# add new column\n",
    "ex1_pandas[\"max_price\"] = ex1_pandas.groupby(\"ticker\")[\"closing_price\"].transform(\"max\")\n",
    "\n",
    "ex1_pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "ex2_sql_query = \"\"\"\n",
    "SELECT\n",
    "    date(Date) AS Date\n",
    "    , ticker\n",
    "    , closing_price\n",
    "    , AVG(closing_price) OVER(\n",
    "        PARTITION BY ticker\n",
    "        ORDER BY date(Date)\n",
    "        ROWS 6 PRECEDING \n",
    "    )\n",
    "     AS ma_7_day\n",
    "FROM\n",
    "    prices\n",
    "ORDER BY 2 DESC\n",
    "\"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>ticker</th>\n",
       "      <th>closing_price</th>\n",
       "      <th>ma_7_day</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-12-31</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1056.780029</td>\n",
       "      <td>1056.780029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2022-01-03</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1199.780029</td>\n",
       "      <td>1128.280029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2022-01-04</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1149.589966</td>\n",
       "      <td>1135.383341</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2022-01-05</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1088.119995</td>\n",
       "      <td>1123.567505</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2022-01-06</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1064.699951</td>\n",
       "      <td>1111.793994</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>720</th>\n",
       "      <td>2022-07-25</td>\n",
       "      <td>addyy</td>\n",
       "      <td>90.019997</td>\n",
       "      <td>87.419999</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>721</th>\n",
       "      <td>2022-07-26</td>\n",
       "      <td>addyy</td>\n",
       "      <td>83.650002</td>\n",
       "      <td>87.824285</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>722</th>\n",
       "      <td>2022-07-27</td>\n",
       "      <td>addyy</td>\n",
       "      <td>83.330002</td>\n",
       "      <td>87.792856</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>723</th>\n",
       "      <td>2022-07-28</td>\n",
       "      <td>addyy</td>\n",
       "      <td>85.300003</td>\n",
       "      <td>87.132857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>724</th>\n",
       "      <td>2022-07-29</td>\n",
       "      <td>addyy</td>\n",
       "      <td>86.139999</td>\n",
       "      <td>86.858572</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>725 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           Date ticker  closing_price     ma_7_day\n",
       "0    2021-12-31   tsla    1056.780029  1056.780029\n",
       "1    2022-01-03   tsla    1199.780029  1128.280029\n",
       "2    2022-01-04   tsla    1149.589966  1135.383341\n",
       "3    2022-01-05   tsla    1088.119995  1123.567505\n",
       "4    2022-01-06   tsla    1064.699951  1111.793994\n",
       "..          ...    ...            ...          ...\n",
       "720  2022-07-25  addyy      90.019997    87.419999\n",
       "721  2022-07-26  addyy      83.650002    87.824285\n",
       "722  2022-07-27  addyy      83.330002    87.792856\n",
       "723  2022-07-28  addyy      85.300003    87.132857\n",
       "724  2022-07-29  addyy      86.139999    86.858572\n",
       "\n",
       "[725 rows x 4 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ex2_sql = pd.read_sql(ex2_sql_query, con=conn)\n",
    "ex2_sql"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>ticker</th>\n",
       "      <th>closing_price</th>\n",
       "      <th>ma_7_day</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>580</th>\n",
       "      <td>2021-12-31</td>\n",
       "      <td>addyy</td>\n",
       "      <td>141.175522</td>\n",
       "      <td>141.175522</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>581</th>\n",
       "      <td>2022-01-03</td>\n",
       "      <td>addyy</td>\n",
       "      <td>144.263733</td>\n",
       "      <td>142.719627</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>582</th>\n",
       "      <td>2022-01-04</td>\n",
       "      <td>addyy</td>\n",
       "      <td>143.185318</td>\n",
       "      <td>142.874858</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>583</th>\n",
       "      <td>2022-01-05</td>\n",
       "      <td>addyy</td>\n",
       "      <td>142.440216</td>\n",
       "      <td>142.766197</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>584</th>\n",
       "      <td>2022-01-06</td>\n",
       "      <td>addyy</td>\n",
       "      <td>140.126511</td>\n",
       "      <td>142.238260</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>140</th>\n",
       "      <td>2022-07-25</td>\n",
       "      <td>tsla</td>\n",
       "      <td>805.299988</td>\n",
       "      <td>765.440002</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141</th>\n",
       "      <td>2022-07-26</td>\n",
       "      <td>tsla</td>\n",
       "      <td>776.580017</td>\n",
       "      <td>773.494289</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>142</th>\n",
       "      <td>2022-07-27</td>\n",
       "      <td>tsla</td>\n",
       "      <td>824.460022</td>\n",
       "      <td>788.182861</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>143</th>\n",
       "      <td>2022-07-28</td>\n",
       "      <td>tsla</td>\n",
       "      <td>842.700012</td>\n",
       "      <td>803.341431</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144</th>\n",
       "      <td>2022-07-29</td>\n",
       "      <td>tsla</td>\n",
       "      <td>891.450012</td>\n",
       "      <td>824.620004</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>725 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          Date ticker  closing_price    ma_7_day\n",
       "580 2021-12-31  addyy     141.175522  141.175522\n",
       "581 2022-01-03  addyy     144.263733  142.719627\n",
       "582 2022-01-04  addyy     143.185318  142.874858\n",
       "583 2022-01-05  addyy     142.440216  142.766197\n",
       "584 2022-01-06  addyy     140.126511  142.238260\n",
       "..         ...    ...            ...         ...\n",
       "140 2022-07-25   tsla     805.299988  765.440002\n",
       "141 2022-07-26   tsla     776.580017  773.494289\n",
       "142 2022-07-27   tsla     824.460022  788.182861\n",
       "143 2022-07-28   tsla     842.700012  803.341431\n",
       "144 2022-07-29   tsla     891.450012  824.620004\n",
       "\n",
       "[725 rows x 4 columns]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ex2_pandas = prices.copy().sort_values(['ticker','Date'])\n",
    "\n",
    "# add new column\n",
    "ex2_pandas[\"ma_7_day\"] = (\n",
    "    ex2_pandas.sort_values('Date')\n",
    "    .groupby(\"ticker\")[\"closing_price\"]\n",
    "    .rolling(7,min_periods=1).mean().values\n",
    ")\n",
    "\n",
    "ex2_pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>ticker</th>\n",
       "      <th>closing_price</th>\n",
       "      <th>ma_7_day</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>580</th>\n",
       "      <td>2021-12-31</td>\n",
       "      <td>addyy</td>\n",
       "      <td>141.175522</td>\n",
       "      <td>141.175522</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>581</th>\n",
       "      <td>2022-01-03</td>\n",
       "      <td>addyy</td>\n",
       "      <td>144.263733</td>\n",
       "      <td>142.719627</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>582</th>\n",
       "      <td>2022-01-04</td>\n",
       "      <td>addyy</td>\n",
       "      <td>143.185318</td>\n",
       "      <td>142.874858</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>583</th>\n",
       "      <td>2022-01-05</td>\n",
       "      <td>addyy</td>\n",
       "      <td>142.440216</td>\n",
       "      <td>142.766197</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>584</th>\n",
       "      <td>2022-01-06</td>\n",
       "      <td>addyy</td>\n",
       "      <td>140.126511</td>\n",
       "      <td>142.238260</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>140</th>\n",
       "      <td>2022-07-25</td>\n",
       "      <td>tsla</td>\n",
       "      <td>805.299988</td>\n",
       "      <td>765.440002</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141</th>\n",
       "      <td>2022-07-26</td>\n",
       "      <td>tsla</td>\n",
       "      <td>776.580017</td>\n",
       "      <td>773.494289</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>142</th>\n",
       "      <td>2022-07-27</td>\n",
       "      <td>tsla</td>\n",
       "      <td>824.460022</td>\n",
       "      <td>788.182861</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>143</th>\n",
       "      <td>2022-07-28</td>\n",
       "      <td>tsla</td>\n",
       "      <td>842.700012</td>\n",
       "      <td>803.341431</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144</th>\n",
       "      <td>2022-07-29</td>\n",
       "      <td>tsla</td>\n",
       "      <td>891.450012</td>\n",
       "      <td>824.620004</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>725 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          Date ticker  closing_price    ma_7_day\n",
       "580 2021-12-31  addyy     141.175522  141.175522\n",
       "581 2022-01-03  addyy     144.263733  142.719627\n",
       "582 2022-01-04  addyy     143.185318  142.874858\n",
       "583 2022-01-05  addyy     142.440216  142.766197\n",
       "584 2022-01-06  addyy     140.126511  142.238260\n",
       "..         ...    ...            ...         ...\n",
       "140 2022-07-25   tsla     805.299988  765.440002\n",
       "141 2022-07-26   tsla     776.580017  773.494289\n",
       "142 2022-07-27   tsla     824.460022  788.182861\n",
       "143 2022-07-28   tsla     842.700012  803.341431\n",
       "144 2022-07-29   tsla     891.450012  824.620004\n",
       "\n",
       "[725 rows x 4 columns]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# copy original dataframe (optional)\n",
    "ex2_pandas = prices.copy().sort_values(['ticker','Date'])\n",
    "\n",
    "# add new column\n",
    "ex2_pandas[\"ma_7_day\"] = (\n",
    "    ex2_pandas.sort_values('Date')\n",
    "    .groupby(\"ticker\")[\"closing_price\"]\n",
    "    .transform(lambda x: x.rolling(7, min_periods=1).mean())\n",
    ")\n",
    "\n",
    "ex2_pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:xlabel='Date'>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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JCIiIiIiIiIigBJFIiIiIiIiIiLiUqJIREREpAzGGI8xZo0xZqMxZq0x5tfGmDJ/hzLGxBtjflpb1ygiIiJSXZQoEhERESnbCWttH2ttd2AsMA549Bz7xANKFImIiEi9Y6y1dX0NIiIiIj7LGHPcWhtW7H0HYCUQA7QDZgGN3Y9/Zq1dYoxZBiQAycAM4EXgaWAkEAy8ZK2dWms3ISIiIlJOShSJiIiIlOHMRJG7LQPoCmQDXmttnjGmE/CutTbRGDMS+K219nK3/WSgubX2T8aYYGAxcK21Nrk270VERETkXALq+gJERERE6iHjvgYCU4wxfQAP0LmU9pcAvYwxE9z3kUAnnB5HIiIiIj5DiSIRERGRCnCHnnmAwzi1ig4BvXFqP+aVthvwc2vt3Fq5SBEREZFKUjFrERERkXIyxjQDXgWmWGf8fiSQaq31AjcD/m7TbCC82K5zgXuMMYHucTobYxojIiIi4mPUo0hERESkbI2MMWtwhpkV4RSvfs797GVgtjHmWuBbIMfdvg4oMsasBd4CXsCZCS3JGGOANODq2rl8ERERkfJTMWsREREREREREQE09ExERERERERERFxKFImIiIiIiIiICKBEkYiIiIiIiIiIuJQoEhERERERERERQIkiERERERERERFxKVEkIiIiIiIiIiKAEkUiIiIiIiIiIuJSokhERERERERERAD4f8fYT3On2PF6AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 1440x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ex2_pandas.query('ticker == \"tsla\"').set_index('Date')[['closing_price','ma_7_day']].plot(figsize = [20,4],rot = 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "ex3_sql_query = \"\"\"\n",
    "SELECT\n",
    "    date(Date) AS Date\n",
    "    , ticker\n",
    "    , closing_price\n",
    "    , LEAD(closing_price, 1) OVER(\n",
    "        PARTITION BY ticker\n",
    "        ORDER BY date(Date)\n",
    "    )\n",
    "      AS next_close\n",
    "    , LAG(closing_price, 1) OVER(\n",
    "        PARTITION BY ticker\n",
    "        ORDER BY date(Date)\n",
    "    ) AS previous_close\n",
    "FROM\n",
    "    prices\n",
    "\"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>ticker</th>\n",
       "      <th>closing_price</th>\n",
       "      <th>next_close</th>\n",
       "      <th>previous_close</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-12-31</td>\n",
       "      <td>addyy</td>\n",
       "      <td>141.175522</td>\n",
       "      <td>144.263733</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2022-01-03</td>\n",
       "      <td>addyy</td>\n",
       "      <td>144.263733</td>\n",
       "      <td>143.185318</td>\n",
       "      <td>141.175522</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2022-01-04</td>\n",
       "      <td>addyy</td>\n",
       "      <td>143.185318</td>\n",
       "      <td>142.440216</td>\n",
       "      <td>144.263733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2022-01-05</td>\n",
       "      <td>addyy</td>\n",
       "      <td>142.440216</td>\n",
       "      <td>140.126511</td>\n",
       "      <td>143.185318</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2022-01-06</td>\n",
       "      <td>addyy</td>\n",
       "      <td>140.126511</td>\n",
       "      <td>138.067703</td>\n",
       "      <td>142.440216</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>720</th>\n",
       "      <td>2022-07-25</td>\n",
       "      <td>tsla</td>\n",
       "      <td>805.299988</td>\n",
       "      <td>776.580017</td>\n",
       "      <td>816.729980</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>721</th>\n",
       "      <td>2022-07-26</td>\n",
       "      <td>tsla</td>\n",
       "      <td>776.580017</td>\n",
       "      <td>824.460022</td>\n",
       "      <td>805.299988</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>722</th>\n",
       "      <td>2022-07-27</td>\n",
       "      <td>tsla</td>\n",
       "      <td>824.460022</td>\n",
       "      <td>842.700012</td>\n",
       "      <td>776.580017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>723</th>\n",
       "      <td>2022-07-28</td>\n",
       "      <td>tsla</td>\n",
       "      <td>842.700012</td>\n",
       "      <td>891.450012</td>\n",
       "      <td>824.460022</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>724</th>\n",
       "      <td>2022-07-29</td>\n",
       "      <td>tsla</td>\n",
       "      <td>891.450012</td>\n",
       "      <td>NaN</td>\n",
       "      <td>842.700012</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>725 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           Date ticker  closing_price  next_close  previous_close\n",
       "0    2021-12-31  addyy     141.175522  144.263733             NaN\n",
       "1    2022-01-03  addyy     144.263733  143.185318      141.175522\n",
       "2    2022-01-04  addyy     143.185318  142.440216      144.263733\n",
       "3    2022-01-05  addyy     142.440216  140.126511      143.185318\n",
       "4    2022-01-06  addyy     140.126511  138.067703      142.440216\n",
       "..          ...    ...            ...         ...             ...\n",
       "720  2022-07-25   tsla     805.299988  776.580017      816.729980\n",
       "721  2022-07-26   tsla     776.580017  824.460022      805.299988\n",
       "722  2022-07-27   tsla     824.460022  842.700012      776.580017\n",
       "723  2022-07-28   tsla     842.700012  891.450012      824.460022\n",
       "724  2022-07-29   tsla     891.450012         NaN      842.700012\n",
       "\n",
       "[725 rows x 5 columns]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ex3_sql = pd.read_sql(ex3_sql_query, con=conn)\n",
    "ex3_sql"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>ticker</th>\n",
       "      <th>closing_price</th>\n",
       "      <th>next_close</th>\n",
       "      <th>previous_close</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>580</th>\n",
       "      <td>2021-12-31</td>\n",
       "      <td>addyy</td>\n",
       "      <td>141.175522</td>\n",
       "      <td>144.263733</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>581</th>\n",
       "      <td>2022-01-03</td>\n",
       "      <td>addyy</td>\n",
       "      <td>144.263733</td>\n",
       "      <td>143.185318</td>\n",
       "      <td>141.175522</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>582</th>\n",
       "      <td>2022-01-04</td>\n",
       "      <td>addyy</td>\n",
       "      <td>143.185318</td>\n",
       "      <td>142.440216</td>\n",
       "      <td>144.263733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>583</th>\n",
       "      <td>2022-01-05</td>\n",
       "      <td>addyy</td>\n",
       "      <td>142.440216</td>\n",
       "      <td>140.126511</td>\n",
       "      <td>143.185318</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>584</th>\n",
       "      <td>2022-01-06</td>\n",
       "      <td>addyy</td>\n",
       "      <td>140.126511</td>\n",
       "      <td>138.067703</td>\n",
       "      <td>142.440216</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>140</th>\n",
       "      <td>2022-07-25</td>\n",
       "      <td>tsla</td>\n",
       "      <td>805.299988</td>\n",
       "      <td>776.580017</td>\n",
       "      <td>816.729980</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141</th>\n",
       "      <td>2022-07-26</td>\n",
       "      <td>tsla</td>\n",
       "      <td>776.580017</td>\n",
       "      <td>824.460022</td>\n",
       "      <td>805.299988</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>142</th>\n",
       "      <td>2022-07-27</td>\n",
       "      <td>tsla</td>\n",
       "      <td>824.460022</td>\n",
       "      <td>842.700012</td>\n",
       "      <td>776.580017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>143</th>\n",
       "      <td>2022-07-28</td>\n",
       "      <td>tsla</td>\n",
       "      <td>842.700012</td>\n",
       "      <td>891.450012</td>\n",
       "      <td>824.460022</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144</th>\n",
       "      <td>2022-07-29</td>\n",
       "      <td>tsla</td>\n",
       "      <td>891.450012</td>\n",
       "      <td>NaN</td>\n",
       "      <td>842.700012</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>725 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          Date ticker  closing_price  next_close  previous_close\n",
       "580 2021-12-31  addyy     141.175522  144.263733             NaN\n",
       "581 2022-01-03  addyy     144.263733  143.185318      141.175522\n",
       "582 2022-01-04  addyy     143.185318  142.440216      144.263733\n",
       "583 2022-01-05  addyy     142.440216  140.126511      143.185318\n",
       "584 2022-01-06  addyy     140.126511  138.067703      142.440216\n",
       "..         ...    ...            ...         ...             ...\n",
       "140 2022-07-25   tsla     805.299988  776.580017      816.729980\n",
       "141 2022-07-26   tsla     776.580017  824.460022      805.299988\n",
       "142 2022-07-27   tsla     824.460022  842.700012      776.580017\n",
       "143 2022-07-28   tsla     842.700012  891.450012      824.460022\n",
       "144 2022-07-29   tsla     891.450012         NaN      842.700012\n",
       "\n",
       "[725 rows x 5 columns]"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ex3_pandas = prices.sort_values([\"ticker\",\"Date\"]).copy()\n",
    "\n",
    "ex3_pandas[\"next_close\"] = (\n",
    "    ex3_pandas.sort_values([\"ticker\",\"Date\"]).groupby(\"ticker\")[\"closing_price\"].shift(-1)\n",
    ")\n",
    "ex3_pandas[\"previous_close\"] = (\n",
    "    ex3_pandas.sort_values([\"ticker\",\"Date\"]).groupby(\"ticker\")[\"closing_price\"].shift(1)\n",
    ")\n",
    "\n",
    "ex3_pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "ex4_sql_query = \"\"\"\n",
    "SELECT\n",
    "    Date\n",
    "    , ticker\n",
    "    , closing_price\n",
    "    , closing_price/previous_close - 1 AS daily_return\n",
    "FROM\n",
    "    (\n",
    "    SELECT\n",
    "         date(Date) AS Date\n",
    "        , ticker\n",
    "        , closing_price\n",
    "        , LAG(closing_price,1) OVER(\n",
    "            PARTITION BY ticker ORDER BY date(Date)\n",
    "        ) AS previous_close\n",
    "    FROM\n",
    "        prices\n",
    ")\n",
    "\"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>ticker</th>\n",
       "      <th>closing_price</th>\n",
       "      <th>daily_return</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-12-31</td>\n",
       "      <td>addyy</td>\n",
       "      <td>141.175522</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2022-01-03</td>\n",
       "      <td>addyy</td>\n",
       "      <td>144.263733</td>\n",
       "      <td>0.021875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2022-01-04</td>\n",
       "      <td>addyy</td>\n",
       "      <td>143.185318</td>\n",
       "      <td>-0.007475</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2022-01-05</td>\n",
       "      <td>addyy</td>\n",
       "      <td>142.440216</td>\n",
       "      <td>-0.005204</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2022-01-06</td>\n",
       "      <td>addyy</td>\n",
       "      <td>140.126511</td>\n",
       "      <td>-0.016243</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>720</th>\n",
       "      <td>2022-07-25</td>\n",
       "      <td>tsla</td>\n",
       "      <td>805.299988</td>\n",
       "      <td>-0.013995</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>721</th>\n",
       "      <td>2022-07-26</td>\n",
       "      <td>tsla</td>\n",
       "      <td>776.580017</td>\n",
       "      <td>-0.035664</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>722</th>\n",
       "      <td>2022-07-27</td>\n",
       "      <td>tsla</td>\n",
       "      <td>824.460022</td>\n",
       "      <td>0.061655</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>723</th>\n",
       "      <td>2022-07-28</td>\n",
       "      <td>tsla</td>\n",
       "      <td>842.700012</td>\n",
       "      <td>0.022124</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>724</th>\n",
       "      <td>2022-07-29</td>\n",
       "      <td>tsla</td>\n",
       "      <td>891.450012</td>\n",
       "      <td>0.057850</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>725 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           Date ticker  closing_price  daily_return\n",
       "0    2021-12-31  addyy     141.175522           NaN\n",
       "1    2022-01-03  addyy     144.263733      0.021875\n",
       "2    2022-01-04  addyy     143.185318     -0.007475\n",
       "3    2022-01-05  addyy     142.440216     -0.005204\n",
       "4    2022-01-06  addyy     140.126511     -0.016243\n",
       "..          ...    ...            ...           ...\n",
       "720  2022-07-25   tsla     805.299988     -0.013995\n",
       "721  2022-07-26   tsla     776.580017     -0.035664\n",
       "722  2022-07-27   tsla     824.460022      0.061655\n",
       "723  2022-07-28   tsla     842.700012      0.022124\n",
       "724  2022-07-29   tsla     891.450012      0.057850\n",
       "\n",
       "[725 rows x 4 columns]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ex4_sql = pd.read_sql(ex4_sql_query, con=conn)\n",
    "ex4_sql\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>ticker</th>\n",
       "      <th>closing_price</th>\n",
       "      <th>daily_return_version1</th>\n",
       "      <th>daily_return_version2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>580</th>\n",
       "      <td>2021-12-31</td>\n",
       "      <td>addyy</td>\n",
       "      <td>141.175522</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>581</th>\n",
       "      <td>2022-01-03</td>\n",
       "      <td>addyy</td>\n",
       "      <td>144.263733</td>\n",
       "      <td>0.021875</td>\n",
       "      <td>0.021875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>582</th>\n",
       "      <td>2022-01-04</td>\n",
       "      <td>addyy</td>\n",
       "      <td>143.185318</td>\n",
       "      <td>-0.007475</td>\n",
       "      <td>-0.007475</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>583</th>\n",
       "      <td>2022-01-05</td>\n",
       "      <td>addyy</td>\n",
       "      <td>142.440216</td>\n",
       "      <td>-0.005204</td>\n",
       "      <td>-0.005204</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>584</th>\n",
       "      <td>2022-01-06</td>\n",
       "      <td>addyy</td>\n",
       "      <td>140.126511</td>\n",
       "      <td>-0.016243</td>\n",
       "      <td>-0.016243</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>140</th>\n",
       "      <td>2022-07-25</td>\n",
       "      <td>tsla</td>\n",
       "      <td>805.299988</td>\n",
       "      <td>-0.013995</td>\n",
       "      <td>-0.013995</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141</th>\n",
       "      <td>2022-07-26</td>\n",
       "      <td>tsla</td>\n",
       "      <td>776.580017</td>\n",
       "      <td>-0.035664</td>\n",
       "      <td>-0.035664</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>142</th>\n",
       "      <td>2022-07-27</td>\n",
       "      <td>tsla</td>\n",
       "      <td>824.460022</td>\n",
       "      <td>0.061655</td>\n",
       "      <td>0.061655</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>143</th>\n",
       "      <td>2022-07-28</td>\n",
       "      <td>tsla</td>\n",
       "      <td>842.700012</td>\n",
       "      <td>0.022124</td>\n",
       "      <td>0.022124</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144</th>\n",
       "      <td>2022-07-29</td>\n",
       "      <td>tsla</td>\n",
       "      <td>891.450012</td>\n",
       "      <td>0.057850</td>\n",
       "      <td>0.057850</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>725 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          Date ticker  closing_price  daily_return_version1  \\\n",
       "580 2021-12-31  addyy     141.175522                    NaN   \n",
       "581 2022-01-03  addyy     144.263733               0.021875   \n",
       "582 2022-01-04  addyy     143.185318              -0.007475   \n",
       "583 2022-01-05  addyy     142.440216              -0.005204   \n",
       "584 2022-01-06  addyy     140.126511              -0.016243   \n",
       "..         ...    ...            ...                    ...   \n",
       "140 2022-07-25   tsla     805.299988              -0.013995   \n",
       "141 2022-07-26   tsla     776.580017              -0.035664   \n",
       "142 2022-07-27   tsla     824.460022               0.061655   \n",
       "143 2022-07-28   tsla     842.700012               0.022124   \n",
       "144 2022-07-29   tsla     891.450012               0.057850   \n",
       "\n",
       "     daily_return_version2  \n",
       "580                    NaN  \n",
       "581               0.021875  \n",
       "582              -0.007475  \n",
       "583              -0.005204  \n",
       "584              -0.016243  \n",
       "..                     ...  \n",
       "140              -0.013995  \n",
       "141              -0.035664  \n",
       "142               0.061655  \n",
       "143               0.022124  \n",
       "144               0.057850  \n",
       "\n",
       "[725 rows x 5 columns]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ex4_pandas = prices.sort_values([\"ticker\",\"Date\"]).copy()\n",
    "\n",
    "ex4_pandas[\"daily_return_version1\"] = (\n",
    "    ex4_pandas.sort_values(\"Date\")\n",
    "    .groupby(\"ticker\")[\"closing_price\"]\n",
    "    .transform(lambda x: x / x.shift(1) - 1)\n",
    ")\n",
    "ex4_pandas[\"daily_return_version2\"] = (\n",
    "    ex4_pandas.sort_values(\"Date\")\n",
    "    .groupby(\"ticker\")[\"closing_price\"]\n",
    "    .pct_change()\n",
    ")\n",
    "\n",
    "ex4_pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# copy orginal dataframe\n",
    "ex5_pandas = prices.sort_values([\"ticker\",\"Date\"]).copy()\n",
    "\n",
    "# remove 30% of data randomly\n",
    "pct_missing = 0.3\n",
    "num_missing = int(pct_missing * len(ex5_pandas))\n",
    "np.random.seed(123)\n",
    "indexes = np.random.randint(0,len(ex5_pandas),num_missing)\n",
    "# import numpy as np\n",
    "ex5_pandas.loc[indexes,'closing_price'] = np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>ticker</th>\n",
       "      <th>closing_price</th>\n",
       "      <th>closing_price_interpolated</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>580</th>\n",
       "      <td>2021-12-31</td>\n",
       "      <td>addyy</td>\n",
       "      <td>141.175522</td>\n",
       "      <td>141.175522</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>581</th>\n",
       "      <td>2022-01-03</td>\n",
       "      <td>addyy</td>\n",
       "      <td>144.263733</td>\n",
       "      <td>144.263733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>582</th>\n",
       "      <td>2022-01-04</td>\n",
       "      <td>addyy</td>\n",
       "      <td>NaN</td>\n",
       "      <td>144.263821</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>583</th>\n",
       "      <td>2022-01-05</td>\n",
       "      <td>addyy</td>\n",
       "      <td>142.440216</td>\n",
       "      <td>142.440216</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>584</th>\n",
       "      <td>2022-01-06</td>\n",
       "      <td>addyy</td>\n",
       "      <td>140.126511</td>\n",
       "      <td>140.126511</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>140</th>\n",
       "      <td>2022-07-25</td>\n",
       "      <td>tsla</td>\n",
       "      <td>NaN</td>\n",
       "      <td>849.614809</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141</th>\n",
       "      <td>2022-07-26</td>\n",
       "      <td>tsla</td>\n",
       "      <td>NaN</td>\n",
       "      <td>827.289432</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>142</th>\n",
       "      <td>2022-07-27</td>\n",
       "      <td>tsla</td>\n",
       "      <td>824.460022</td>\n",
       "      <td>824.460022</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>143</th>\n",
       "      <td>2022-07-28</td>\n",
       "      <td>tsla</td>\n",
       "      <td>842.700012</td>\n",
       "      <td>842.700012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144</th>\n",
       "      <td>2022-07-29</td>\n",
       "      <td>tsla</td>\n",
       "      <td>891.450012</td>\n",
       "      <td>891.450012</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>725 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          Date ticker  closing_price  closing_price_interpolated\n",
       "580 2021-12-31  addyy     141.175522                  141.175522\n",
       "581 2022-01-03  addyy     144.263733                  144.263733\n",
       "582 2022-01-04  addyy            NaN                  144.263821\n",
       "583 2022-01-05  addyy     142.440216                  142.440216\n",
       "584 2022-01-06  addyy     140.126511                  140.126511\n",
       "..         ...    ...            ...                         ...\n",
       "140 2022-07-25   tsla            NaN                  849.614809\n",
       "141 2022-07-26   tsla            NaN                  827.289432\n",
       "142 2022-07-27   tsla     824.460022                  824.460022\n",
       "143 2022-07-28   tsla     842.700012                  842.700012\n",
       "144 2022-07-29   tsla     891.450012                  891.450012\n",
       "\n",
       "[725 rows x 4 columns]"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# interpolate missing data paritioned by ticker\n",
    "ex5_pandas[\"closing_price_interpolated\"] = (\n",
    "    ex5_pandas.sort_values(\"Date\")\n",
    "    .groupby(\"ticker\")[\"closing_price\"]\n",
    "    .transform(lambda x: x.interpolate(method=\"polynomial\",order = 2))\n",
    ")\n",
    "\n",
    "ex5_pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:title={'center':'Missing imputation\\nRED dots'}, xlabel='Date'>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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GPOlMWaXMSYfMM0ecxljbjbGlBpjthpjFhlj+vsefsv3fadvBNNxxpj9jTFv+o613RjzeHdiFxEREekMJYpEREQkZhhjRgPnAGuCPNR/gGFAtp9zDAGeAm4GhgBrgWnNNvmO7+tUYD8gHcj3PXaS7/sA38imd4DfAi8DA4HRwN1Bxi4iIiISkBJFIiIiEguKjDFVwAZgK3Brq8dvMMbsbPb1YAfHK/d9H+TnsXOBVdbaJ621DcCfgc3NHs8F/mit/dpauwdnGtzl7dQlagDGAZnWWre1dkkHsYmIiIh0mxJFIiIiEgtyrLX9gFOAA3FG+jT3e2vtgGZfV3dwvFG+7zv8PJaJk5ACwFprm9/3PV7a7H4pEA8MD3CuX+BMXXvfGLPSGPO9DmITERER6TYlikRERCRmWGvfBB4Afh/koS7GGZlU7OexTcCYpjvGGNP8Ps5opHHN7o8FGoEtgPUT82Zr7TXW2kzg/4B7jTH7Bxm/iIiIiF9KFImIiEis+TNwpjHmsK7uaIwZboyZhTN1ba611utns+eBycaYS3zTyX4MjGj2+KPAT40x440x6cAdwOPW2kZgG+DFqV3UdM5LfbWVACpxkkmersYuIiIi0hlKFImIiEhMsdZuAxYBtzRr/oVvlbGmr+2tdttpjKkGPsOpQXSptfbfAY6/HbgUuBOoACYCS5tt8m/gIZwVzkoANzDbt28NMB9Y6quVdCxwFPCeMWYP8CxwvbW2pPs/AREREZHAjDNtXkREREREREREYp1GFImIiIiIiIiICKBEkYiIiIiIiIiI+ChRJCIiIiIiIiIigBJFIiIiIiIiIiLiEx/tADoyZMgQm5WVFe0wRERERERERET6jA8//HC7tXZo6/YenyjKyspi+fLl0Q5DRERERERERKTPMMaU+mvX1DMREREREREREQGUKBIRERERERERER8likREREREREREBFCiSEREREREREREfJQoEhERERERERERQIkiERERERERERHxUaJIREREREREREQAJYp6n4ICyMoCl8v5XlAQ7YhEREREREREpI+Ij3YA0gUFBTBzJtTUOPdLS537ALm50YtLRERERERERPoEjSjqTebN25ckalJT47SLiIiIiIiIiARJiaLeZP36rrWLiIiIiIiIiHSBEkW9yZgx/tvHjo1sHCIiIiIiIiLSJylR1JvccQekprZsS02F+fOjE4+IiIiIiIiI9ClKFPUW998Phx4KCxfCuHFgjPN94UIVshYRERERERGRkOgwUWSM+bcxZqsx5vNmbXnGmC+NMZ8aY542xgxo9thcY8waY0yxMebsZu1HGmM+8z32V2OMCfmz6atqa52C1X/4g5MUWrcOPB5YvVpJIhEREREREREJmc6MKHoA+EartleAg621hwJfAXMBjDEHAZcDk3373GuMifPtcx8wE5jo+2p9TGmlKL+QabMXMf62V5l2yZ0UHXya80BFBfTrB3/7W3QDFBEREREREZE+pcNEkbX2LWBHq7aXrbWNvrvvAqN9ty8CHrPW1llrS4A1wNHGmJFAhrX2HWutBRYBOSF6Dn1SUX4hc0viKEsbjDUuytIHM3dTGkX5hTBoEFx7LRx2WLTDFBEREREREZE+JBQ1ir4HvOi7PQrY0Oyxjb62Ub7brdv9MsbMNMYsN8Ys37ZtWwhC7H3yit3UJiS3aKtNSCav2O3UJ8rLgxNPjFJ0IiIiIiIiItIXBZUoMsbMAxqBgqYmP5vZdtr9stYutNZOtdZOHTp0aDAh9lrlqQPbb7cWYjSJJiIiIiIiIiLh0e1EkTHmauB8INc3nQyckUJjmm02Gij3tY/20y4BZNZUtt+elwfDhkF1dQSjEhEREREREZG+rFuJImPMN4AbgQuttTXNHnoWuNwYk2SMGY9TtPp9a+0moMoYc6xvtbMZwDNBxt6nzclOJs7radGW0uBmTrZvOtoZZ8Cf/wxeb+SDExEREREREZE+qcNEkTHmUeAdINsYs9EY830gH+gHvGKM+cQY8zcAa+1KoBBYBbwEXGetbcp2XAv8E6fA9Vr21TUSPy760bdIra8lpcGNsV5GVVewYLyHnFnTnQ2OOAKuv95Z/UxEREREREREJATiO9rAWnuFn+Z/tbP9fGC+n/blwMFdii6Grd5SRVVyOr87PI3pl53if6PKSqithczMiMYmIiIiIiIiIn1TKFY9kzBYsnYHANPOPibwRkccATfcEKGIRERERERERKSv63BEkUTH0qUrGZ+RyKgBKYE3ysuD4cMjF5SIiIiIiIiI9GlKFPVADXX1vLvFTY4tBc4KvOG3vhWxmERERERERESk79PUsx7o0017qE5M4YTzprW/YW0tfPgh7NkTmcBEREREREREpE9ToqgHWrKmAmPguOMPan/Dd96BqVPhvfciE5iIiIiIiIiI9GlKFPVAS99cwSEZLgakJra/4RFHwFNPwZQpkQlMRERERERERPo01SjqYaqravjIncA1DaUdbzxgAFxySdhjEhEREREREZHYoBFFPcz75XtojItn2uXf6NwOq1fD22+HNygRERERERERiQkaUdTDLF29ncR4F1Mnj+ncDrfdBkuXwrp14QxLRERERERERGKAEkU9zJI3P+GoAekkJ8R1boebboKGhvAGJSIiIiIiIiIxQYmiHmTb9l18GdefX9Rv6vxOkyeHLyARERERERERiSmqUdSDLNu4B4Bp3+9Cgeq6OnjmGfjyyzBFJSIiIiIiIiKxQomiHmTZmgoykuM5ePTAzu/k8UBODjzxRNjiEhERCaWi/EKmzV7E+BsXM232IoryC6MdkoiIiIj4KFHUQ1ivlyVLP+d4127iXKbzO6amwkcfwfXXhy84ERGRECnKL2RuSRxlaYOxxkVZ2mDmlsQpWSQiIiLSQyhR1EOUllVQltSfaRneru98+OGQkRH6oEREREIsr9hNbUJyi7bahGTyit1RikhEREREmlOiqIdYUlYDwAnfPr/rO991FwwaBC4XZGVBQUFogxMREQmR8lT/06sDtYuIiIhIZClR1EMsW72NzP7JZA1O7dqOBQVwyy1QWQnWQmkpzJypZJGIiPRIw2t3+W3PrKmMcCQiIiIi4o8SRT2Ap6GRZR+uZVpNOcZ0oT4RwLx50NDQsq2mxmkXERHpYYYN6ud8sNFMSoObOdnJAfYQERERkUhSoqgHWFW6nZ3J6ZwwcUjXd16/vmvtIiIiUfL6Q8/zqTue81KrGVVdgbFeRu3ayoKsRnJmTY92eCIiIiICxEc7AIElG6sBOP7i07q+89ixznQzf+0iIiI9RE19I7d85WVidQV/+tXlJKYmwxtvgDsBzj472uGJiIiIiI9GFPUASz/bQPbwdIb2S+r6zvPnQ2qrukapqU67iIhID/GX11ZT1uBi/k8vcJJEAKecAt/4BnR12rWIiIiIhI0SRVHmrqrmg9IdTNtS3L0D5ObCwoUwZozzRnvcOOd+bm5oAxUREemmL97+iH++uZbLpo7h6P0Gt3ywthby8mDJkugEJyIiIiItKFEUZR9t2EldfBInnHBw9w+Sm+vUJPJ6Yd06JYlERKTH8HotNxV9Tv/aKn55wqi2GxgDf/wjvPBC5IMTERERkTaUKIqyJeuriHcZjj7z6OAOtGUL/PznsHx5aAITEREJgUc/WM/HCYOZd1oWA0cMbrtBcjLceis88gi4XJCVBQUFEY9TRERERBxKFEXZ0g+/5vCR6aQnBVlX3OWC++6DVatCE5iIiEiQtm7cyl0vfslx+w3mkguP9b9RQYHzQUdpKVjrfJ85U8kiERERkShRoiiKdm3axme7Gjl+85fBH2zoUKiqghkzgj+WiIhICNx+1xO4a9zcfsEkTKCC1fPmQU1Ny7aaGqddRERERCJOiaIoemdbA15XHCecPy00B4yLC81xREREgvTWV9t4Ni2LawfsYcLI/oE3XL++a+0iIiIiElZKFEXR0q93kJYYx2FHTwrNAZ9/Hi691ClqLSIiEiXuBg+3PPM5+w1J49o5l7e/8dixXWsXERERkbBSoiiKln6wmmOGJpIQF6Jfw7ZtTo2iHTtCczwREZFuuOf2BymtqOH2nINJTuhgtOv8+ZCa2rItNdVpFxEREZGIU6IoSspXr+drTyLH7yoN3UG/8x1YuRKGDAndMUVEpG8rKHBWGgvRimNrtlTxN/cQLqlZx/H7d+L/UW4uLFwI48Y59xMSnPu5uUHFISIiIiLd02GiyBjzb2PMVmPM583aLjXGrDTGeI0xU1ttP9cYs8YYU2yMObtZ+5HGmM98j/3VBKxqGRuW7nKe/gnTz4xyJCIiErMKCpwVxkK04pi1lpuKPic1NZmbfnVV53fMzYV16+DRR+Guu5QkEhEREYmizowoegD4Rqu2z4FLgLeaNxpjDgIuByb79rnXGNM05vw+YCYw0ffV+pgxZema7QxJTyR74qjQHvj662Hu3NAeU0RE+qabbgrpimNPPPo675fs4KZzD2TIkIyuH+Dyy+GnP+3WuUVEREQkNDpMFFlr3wJ2tGr7wlpb7Gfzi4DHrLV11toSYA1wtDFmJJBhrX3HWmuBRUBO0NH3UtbrZclHXzMtwxt4ueDuqq11vkRERDqyYUObpqJJJzPtnFsZf+Nips1eRFF+YacOtWNHFQve38ZRNZu49Mgx3Y+pthZ27er+/iIiIiISlPgQH28U8G6z+xt9bQ2+263b/TLGzMQZfcTYPrjqyVeff812VzLTPBWhP/jChaE/poiI9AlF+YXkFbspTx1IZk0lc6aeS84Hz+97fNLJzD1nNrUJyQCUpQ1mbokb8gvJmTW93WPPf/VrqlL6Mf+ig3C5uvkhSF0d9O/vjIz99a+7dwwRERERCUqoi1n7e2do22n3y1q70Fo71Vo7dejQoSELrqdYutuZjTft2+dHORIREYkVRfmFzC2JoyxtMNa4nCTQid+l6JDT926Td/LVe5NETWoTkskrdrd77He+3MRTH23k/06ZwAHHHtr9IJOSIC8Pzj67421FREREJCxCnSjaCDQfbz4aKPe1j/bTHpOWrtnO+CFpjBrajfoNHdmwAY46Cp59NvTHFhGRXiuv2O0/CXTiVc6KY8ZQnuF/lbLy1IEBj1tXXcu8/JcY66pn9mkTgw/0+uvh+OODP46IiIiIdEuoE0XPApcbY5KMMeNxila/b63dBFQZY471rXY2A3gmxOfuFRrcdby7ciPT4naH5wRDhsDAgZCYGJ7ji4hIrxQo2VOePshZcczrJbOm0u82/tqL8guZNnsR2b95ja/Th3GOZzPJCXF+9u6ixkb44guorw/+WCIiIiLSZR0miowxjwLvANnGmI3GmO8bYy42xmwEjgOeN8b8F8BauxIoBFYBLwHXWWs9vkNdC/wTp8D1WuDFkD+bXmDFZ+uojkvkhP5hOkFKCrz8MnwjpheVExGR5urqyKza7veh5kmgOdnJpDS0mmZmLReNavnhQ/NpbPgWZVjUOKzTha/b9cwzcNBB8NlnwR9LRERERLqsw2LW1torAjz0dIDt5wPz/bQvBw7uUnR90JJdBmPg2MvDnMixdu+bdxERiXGJicypXsXclIwW089SGtzMyd53P2fWdMgvJK+4gvLUgYyo2YknOZlFW+L4z+yH2ZLan8yaSmpcidSmpLU4hVPLqCL4JU2nTYNFi5zpcCIiIiIScaGeeiYdWLZmO4eM6s+A1DBODfvnP2HYMHC3X3xURET6OI8Htm4FY8h5MI8F4z2Mqq7AWC+jqitYMN7TZjWznFnTWXr3DEruuoB37r6K76XvZk9iCpvTBu4tgl2ZnO73dO3VMuq0ESPgqqucqdQiIiIiEnEdjiiS0KnesYuPvt7GNcMawnuiCRPgW9+CmhpITu54exER6ZvmzIGnnoJPPoGBA8mZNb3LI34e2p4Aaa1GqAYYsRqoxlGXbdzofB17bGiOJyIiIiKdpkRRBL1fvJlGVzwnTBwQ3hOdeqrzJSIise2qq2DoUGeRg24KOEqo1RTn1tPYgnLTTfDaa1BWFprjiYiIiEinaepZBC2p8JAU7+LIc0+IzAm1YoyISGz68kvn++GHw9y5QR0q0CihAe6qDqexddvPfw5PPukko0REREQkojSiKIKWFm9matbA0Cwf3I6i/ELyVlVT3m8ImTWVzMlODt2b9+bnKHZTnjowbOcQEZFuWLwYLroIXnghJCtgzslOZm6Ju00R7NsmxpEzK9B6F0GaMiU8xxURERGRDmlEUYRs+3ojX26rZdr2tWE9z94lizOG7S06OrckLjRLFrc+R9rgsJ1DRES66cwz4fbb4bTTQnK4nFnTO1UEO6S8Xnj1VVixInznEBERERG/NKIoQpaVVwNwwgmTw3qevGI3tWmDW7SFbMniCJ5DRES6aPlyOPhgZxGDm24K6aG7UwQ7KMbApZfC5ZfDffdF8swiIiIiMU+JojBrmqJVljoIg2XNJ19x6AmHhe18gYqOBrNkcfNpZiNrdlKeOijk5xARkSBs3+4sYnDVVXDvvdGOJnjGOCOKxo2LdiQiIiIiMUdTz8Ko+RQtjMEaF/PCPEUrUNHR7i5Z3HqaWXnaoPAviywiIl0zZAgsWgS/+lW0IwmdI490npeIiIiIRJQSRWGUV9yy+Cc0TdFyh+2cc7KTSWloefzkhrpuL1ns7zkAmFYr0YR0WWQREQmsoACyssDlglGjnHpEABdfDCNGRDW0kCovh7/9zRktJSIiIiIRo0RRGIVjGlhHmhcdbVpWeMYI2+2io2UBpplZbNvCpj/6VrfjFhGRTigogJkzobTUeY0vL3dGES1aFO3IQm/tWrj2Wqf2koiIiIhEjGoUhVFmTaUz7cxPezg1FR2tb/Ry5K//yw6T0OVjeBoa+d2znwacZjaqppKld8/Y13DRRfDL70FNDYwdC/PnQ25u956AiIj4N2+e8zrbnLVOsmjGDP/79FZHHQXr1jn/U0REREQkYpQoCqM52cnMLWk5dSuSU7QS412ctftr/rtnKHe460lMTuzUfrvdDVx/4/38L2UU01Lr+XCXxZ2QtPfxNs+hoABefBEaGpz7paXOJ96gZJGISCitX9+19l6s6J/P7l1IIbOmkjnZyd0eHSsiIiIinaepZ2HUfBpYiylaEXyje/4lJ1GVlMaSdZ0bxbRuezWX3LuMt1NHcfugHRT86mLuHN/Y/nOYN29fkqhJTY3TLiIioRNodE0fG3XTeiGFsrTBzA3zYhAiIiIi4jC2VVHinmbq1Kl2ueoTdFt9o5ept7/CmQeN4A/Tp7S77ZLCl7luRT2upETuzT2S4ya0nTbnl8u1tx5SC8aA19uNqEVExK+mGkXNp5+lpsLChX1qBOe02Yv8Tt0eVV3RctqztFVQ4HxQs369poKLiIhIu4wxH1prp7Zu14iiPi4x3sVZIxJ4efnX1FXX+t3GWsv9S0q4+sM6RuzayjM/Or7zSSLo2ifczVfrycpy7ouISOfk5jpJoXHjnGT8uHF9LkkE0VkMok9oXey8aSq4/teKiIhIFyhRFAPOS3dT5UpkyVuftnmsvsbN3MKP+fVzqzh14mCeuu1ixg5J79oJ5s93PtFuLjXVaW9Ob2BFRILT2OiM1Fyxwvm+bl2fSxJB4EUfwr0YRK/nr9i5poKLiIhIF6mYdQyYdumZ9F/7Os9XJXF6s/aK3bVc+8sHeT9jDNedMoGfn5WNy+V/lbN2NV2ktBrqXvR+CXnvPEh52iCnEOl7heQEegN74okwciQkdH6FtqL8QhU6FZHYsnSps7rZk0/CN78Z7WjCJtqLQfRaMVTsXERERMJHI4piQGJSAmcdNIJXVm6hrtEDwKry3Vx47zusyBjFX8bWMOcbB3YvSdQkN9f5ZNv3CXfRjnjmxk+iLH3IvkKkJ36Xokknt913/Xpn+sSf/uTc37MHpk+H//3PuV9XBx98ALt3791FhU5FJCaddBK89x6ce260IwmrNotB7N4a8cUgoqkov5Bpsxcx/sbFTJu9qPP/22Kk2LmIiIiEl0YUxYiBX3xGVd1Asue9yCB3FVUp6QzKSKHwuhOZMmZAyM+X91UdtWktp7DVJiSTd/LV5HzxZsuNR4+GX/0KjjnGub9jhzOtYscO5/7atXD00fDII3DFFbBmDXmrqqnNGNb2+MUV5IT82YiI9BDGOK+HMSBn1nTn9dzrderaxYimD0JqfcW8nQ9C3JBf2HGibP58+M53nCmKTfxNBRcRERFphxJFMaAov5BFu1IhATCGHSkZGK+X69Iqw5IkgnYKkWYMadmQmgoLFrSssTF2LBQX77s/ejQ88wxM9RVjr6mhvF+r43RwXhGRXm/JEnjpJZgzB/r3j3Y0kRPlJFGkpznnFbv3JomadPqDkKb/pTfdBBs2wJgxcMcd8K1vhSNUERER6aNi5yO6GJZX7MadkNSizbpc/H2N/1XQQiFgIdI9O7q+Wk9GBlx4IWRmOvcPPVSFTkUk9rzzDtx3HyTHYJ2eX/0Krr464qeNxjTnoFd8y811Fovwep3vZ50FRx4J//hHCKMUERGRvkyJohgQjWWG52Qnk9LgbtGW0uBmzqSUFrWMurtaj7/jJzfUqdCpiPRdc+Y4Nd2Skjretq+Ji4vKyKK84pYFtaFpdI87wB7BC+qDkCeegMsvh6qqfW0DBsChh8LEiaEJUERERPo8JYpiQDRG37QpRFpdEdJCpM2Pj7UAXDbcxkyhUxGJUWlp0Y4gOm69Fe6/P+KnjcoHLfsn+P+gpTMfhFRUOFO305vVCExIcGr8nXKKc3/79tAFKyIiIn2SahTFgGgtM7y3EGmYj+/xWo6/ZTFl26s62kVEpGcrKIB585yRQ2PHUnThD8izY536OFUVzDkoNbYT4hEubJ1ZU0lZq3pBTe3hknP9FZBfyO+KKyhPHURqYx13dPaDlh/+0PkK5KWX4NJLne/TpoUuaBEREelTNKIoBoR7dE+0xbkMFzWW8waD2LE7fHWXRETCqqAAZs506spYS1FqFnMTJu2rj5MxNOz1cXq03Fy44IKInnJOdjLxnsYWbWH9oKWwECoqyJk1nWV3z+CMg4YzbMSg0P2/PvpouPJKOOSQ0BxPRERE+iQlimJEzqzpLL17BiV3XcDSu2f0mSRRk4t/fDmNrjieX7kl2qGIiHTPvHlQU7P3bt7JV0e8Pk6PdswxcOKJET3lRT/6FgPjLImeBrCWOE9j50f3dFZBAWRlOSOlLrsMrrpq70PHVG9iXUUNW74q7fg4L78Mhx8Oq1cH3mbQIPj7351FIhob4euvg49fRERE+hwliqRPmDRqAAeO6Md/PtoY7VBERLpn/foWd8szhvjdLJz1cXq0H/8YfvnLiJ7ys1ffYxsJ/Ga8lzv3t3ji4pl4wemhO0GrUWQAvPGG0w4ce9AoAN4t3dnxseLiYMgQGDmyc+e+/no47jjYsaPrcYuIiEifpkSR9BkXp1Xz8YZdlCxfGe1QRES6bsyYFnczd/svOhzO+jg9nscT0WLMRbuSSMRyzsUncvaVZxPvMixetTV0J2g1igyA2lqnHTjopCPolxTPu1WdeLt2+unwyistC1m35/rr4Te/cUYZiYiIiDTT4TsPY8y/jTFbjTGfN2sbZIx5xRiz2vd9YLPH5hpj1hhjio0xZzdrP9IY85nvsb8aY0zon47EsotOOhBjLUVrdkc7FBGRrrvjDkhN3Xt3zpsPdn/1q77qhBNaTM0Kp0aPl8Vf7eDUySPoP3IoA9MSmTZhEM+/9zXW6w3NSVqNImvdHucyHDV+EO+t6SA55fU6SbSuOOAA+L//c25/9RVs2tS1/UVERKTP6syIogeAb7Rq+yXwmrV2IvCa7z7GmIOAy4HJvn3uNcbE+fa5D5gJTPR9tT6mSFBGZI9n2sShFG1wY5uG8ANF+YVMm72I8TcuZtrsRbFbCFZEeq4FC5xpQAsXwrhxYAw5NetY0PBFn12IoFtmz4bvfz8ip1r28ntsq6oj59ARe9vOry5loxtWvPJu9w+8ejUceyy8+y6MHet/m2btx2xdzdc73GxduyHwMT//HAYMcEYUdVVDA5xzDkUzbtD/ShEREQEgvqMNrLVvGWOyWjVfBJziu/0g8AZwo6/9MWttHVBijFkDHG2MWQdkWGvfATDGLAJygBeDfgYizYyp2MiSymT2++XzZNbs4NT4Kp5yjaDWt7xxWdpg5pa4Ib8wti+2RCTqivILySt2U546kMzdI5hz+9/J+fddzupePjm+L/GxFm64AaZPd5Ip8+e3+HmFUtErK+hnB3HqfvtqQp01/XRu+su7PF/Xj8O6crDaWtiyxSlaPXKkM/pn1y4n/pkzW04/S0112n2OOe4geL6M9zbVcMGEAMdPSYEZM5xRQl2VkEDR9FnMrR+7t3i6/leKiIjEtu7WKBpurd0E4Ps+zNc+Cmj+kddGX9so3+3W7X4ZY2YaY5YbY5Zv27atmyFKrCnKL+Tprc6MRmsMZWmDeThxnFYNEpEepyi/kLklcZSlDcYaF2X9hzF34NEaxdGe1oWfS0ud+77Cz6FUW+/hv+lZnHvQMJL7pe1t7z9iCCdlD+f5lVvxem07R2jllFP2TZlLT4cPPoCzz3aSXM1GkTFunHO/WfLr4OMPJS0xjve21wc+/sSJcM89zv7dkLdnsP5XioiIyF6hLmbtr+6QbafdL2vtQmvtVGvt1KFDh4YsOOnb8orduBOSWjYGKIUVs6sGiUiPkFfs1oV5V/kr/FxTs7fwcyi9+sUWqus9XHTawW0eO++AgZTvcvPx/5YHPkBpKfz6107tIICbb4bf/tb/trm5sG6ds+26dW1GSMXHuZg6dgDvriwLfL7Nm9t/Qh0I9D9R/ytFRERiU3cTRVuMMSMBfN+bqixuBJov2zIaKPe1j/bTLhIyXXlDG9OrBolI1OnCvBs6KPwcCk017WY/8hEur4ctL77eZpsz9x9IYmM9z73pZ4XNpvp4y5Y508dWrHDuX3CBM6qom44tW8WaKg/b1/lJFm3f7kxnu/vubh8/0P9E/a8UERGJTd1NFD0LXO27fTXwTLP2y40xScaY8ThFq9/3TU+rMsYc61vtbEazfURCItAbWmNbDl6L+VWDRCTqdGHeDZ0o/ByM5tMBMQavK46bSuLaTAfsN2wwByR7edA9aF/h5z8+7CxP/69/ORtdeimUlMDhh4cktmPOOgaA97Y3tn0wLg7+8hfn/N00JztZK+yJiIjIXh0miowxjwLvANnGmI3GmO8DdwJnGmNWA2f67mOtXQkUAquAl4DrrLVN67VeC/wTWAOsRYWsJcQCvdHNrS/VqkEi0qPMyU4mwdPQok0X5h2YP98p9NxcSkqLws/B6Ox0wKL8Qorr4vC64pz6UmmDmVuWQlHSGEhIcDaKj4dRAUsxdtkhR08iNTGO98qqWj5QUOAko37yEzj33G7Xa8qZNZ0F4z0MdO8BYFjNTv2vFBERiWHG2i4UY4yCqVOn2uXL26kDINJMi1WEaiqZk53c9o1upe8T+4Ga4iEi0TPjlsd5u95JfAR8vZKWCgqcmkTr1zvTvObNg9tvD8mhx9+4GGvafn5mrJeSuy7Ye3/a7EXOqKNWRlVXsPTuGSGJxZ+r7nmTLdt28/Jtvliainu3XjGtVTHsrlj25KtcubyOR6Ymcvy3zgxB1CIiItKTGWM+tNZObd0eH41gRMIlZ9b09peS3rPHWT74yiudofoiIlHSWLGDQ9nFM/fOjHYovUdurvNlrZP0HzQoZIfOrKn0mwBqPR0wWvWlMr74jLfTxzP+xufIrNnBnPcKyQlU3LubiaLhB0+E5Z+zpf+wjjcWERGRPivUq56J9Gzp6c5KNN/7XrQjEZEY99WQcWQfMLrjDaUtY/YliRr91O3phs7W6YlGfami/EJeTXamslljnOluJ36Xokknt904iOLew8c759iSmN7tY4iIiEjvp0SRxJ4f/Qg+/xyyssDlcr53s66DiEh3bN9Tx/Z6ywFHHhjtUHq3a66BnJyQHKqpTk9HNe2iUfg5r9hNXXxii7bahGTyTr667cZBFPdOT4onPdHF5rLt3T6GiIiI9H6aeiaxp6DAubiorXXul5Y6dR6g28P1RUS64quV6wA4cEhKdAPp7Q49FDIznaloxnT/OG43/P735Fx7LTmD204/ay5n1nTILySvuKL9enghFHC6W8aQlg2pqUEX9x5esYkty76GK48J6jgiIiLSeylRJLFn3rx9SaImQdZ1EBHpiuLX3gWGcEBiaKZNxazZs53k//jxzpSrsWOdRElXX8v/9z/41a/g+OPhtNM63LzDenghFrB+0p4dMG5ccM+9lRGjh7LF6O2hiIhILNPUM4k9geo3BFHXQUSkK74am82geMvQ8aFbQj0mNa38VVrqjCpqGiHa1enE55wDq1fDqaeGJ84gBZzuNikF1q0Dr9f5HoIPO4bvN4YtJAV9nIgrKNCUchERkRBRokhiT6D6DWPGRDYOEYlZX+72cMDYwRiX/g0HZd68lsvDg3P/Jz/ZV+TaWv/7tk4svPtucNPXwqiz9ZNCYXgSbN1Vi7fRE/Jjh02oEoYiIiICaOqZxKL58503kM0vLoyBX/4yejGJSMywXi9fbazkW5OHdLyxtC/QSNDt250EEDjJpAcegLIy57X+ySfh0UfhpZf2/R/oBbXqIjXdbfgXK2iwQ9ixcTNDsnrJiLdACUNNKRcREekWfZQpsSc3FxYudOo6GOOMMLr3Xrj22mhHJiIxoGzVWqq9huzyNdEOpfcLNEJ05Mh9iaJjj4Wrr943Wuitt+DZZwMnFmLciKOnALDF24s+S9SUchERkZBSokhiU27uvroOpaXwwx86w9XvuANeeCHa0YlIH1ZMGgDZZx4f5Uj6gPnznZW+mktNhby8ffcvvBAWLNh3/69/BU+AaVVKLDBs4jgAttRHOZB2FOUXMm32IsbfuJhpsxdRdNhZ/jcMlEgUERGRdilRJNLE7YannoJnnol2JCLShxVvd0ayTDxQddGC1nqE6Lhxzv2OphsFSiAoscCItAQAtpSURzkS/4ryC5lbEkdZ2mCscVGWNpi5p15D0cGtVqtLTXUSiSIiItJlShSJNElJgddfh/vui3YkItKHffXBKkYlQUZyQrRD6RuajxDt7MpfgUYiKbHA0LQEjPWyeckH0Q7Fr7xiN7UJyS3aahOSyTtpRssp5XfdpfpEIiIi3aREkUhz/fs7dS22bYPLLoMtW6IdkYj0MV+WbOWAbaXRDiO2dXckUgxISE5icKKLLRMnRzsUv8pTB/pvTx+0L2F44YVO0q9p5TsRERHpkl5UqVAkgkpLndFFn38Ow4dHOxoR6SMaPF6+HpjJyVOGRjsUyc1VYiiAEcMy2GJ75oi3zJpKytIG+23f69JL4dBDnVpU8XqrKyIi0lX67yniz9SpUFIC6enRjkRE+pDSimrqPZYDJ46MdigiAQ13eSgv3x7tMPyak53ML0vqcCck7W1LaXAzJ7vZdLSTTnK+REREpFs09UwkkKYk0eLF+1ZF6yHarPiSXxjtkESkE758+2MADkiPi3IkIoENX7OSrVt3RTsMv3JmTee7CVudO9YyqrqCBeM95Mya3nJDtxsKC2HnzojHKCIi0tspUSTSkRUr4MMPoaoq2pEAAVZ8KYlTskikF/jq0zXEeT1MGJER7VBEAhp+7BFUpGRQ1+iJdih+1Y0bT6K3kVW/PImld89omyQCZ+r4ZZfB009HPkAREZFeTlPPRDoybx7ccAMkJ3e8bQTkFbupbVWfoTYhmdtW7yZv9iLKUweSWVPJnOxk/2+eo6Aov5C8YnePjE0kkor3P5SszbtJ7pcW7VBEAhqx3yj4eAfbquoYPTC14x0i7I3qJI47cCCpA9tJuB55JLz1Fhx/fOQCExER6SM0okikI8Y4SaL6eoou+T+mXfdgVKd8BVrxZWdyvx45ykgjoET2Kd5cRXZm/2iHIdKu4XHOSKItX2+MciRtrdu4na+3V3NqdgcF4Y2B9ethwgRnNdOsLCgoiEiMIiIivZ0SRSKdVHTvk8wdfxZl/YZENeHRYmWX5oxpcbc2IZm8YncEImpfXrGb2oSWo7F6SmwikVS7q4rS7dVkN+6Odigi7RpeVQHA5g8/j3Ikbb2+6HkAThvWwaD4ggKYOdNZxdRa5/vMmUoWiYiIdIKmnol0Ut7aRmrTWo4EcBIeFeREMI452cn8vLQRT1yzP19r2ySKIPDoo9bCOTWsPHVQgPbOxRYqmv4m0bb6s7VYY8hu6JlFgkWajDgkG17cwpYJB0U7lDb+lzSC/ahi7MQx7W84bx7U1LRsq6lx2nNzwxegiIhIH6BEkUgnBUpsRDrhccY1lxB/60skNtThjk8gs6aSGlcilSn92mwbcPRRM01Tw5rqHjkjpdyQX9itRErzhEz/+lpsov/6Fp2JLRgt4nDvoTohhYY0py5MsM9RpKuK8gu5ba2FpHR+9Wk1bvU96cEGDEwnMd7Flrqes9onQHVdI+/t8DLjhE4ksNav71q7iIiI7KWpZyKdFCixEe6ER2tPv19KHYaHf3wqJXddwNK7Z3DrRBcpDS2nciU31DEnu+MC3KGcGta6HtHOpDSwlgRPQ4vtUhrcnYqtu9rEkZJBQ3xCi200/U0ipak/7kxKB2Br6gDV6ZIezRjD8HgvW4pLoh1KC8veWUW9x8upBw7reOOxY7vWLiIiInspUSTSSXOyk9skY8Kd8GjNer0seuxNDrZVHDF2wN72nFnTWTDew6jqCox1PgE+N76yUyMWQjlSyl/SCZeLtPpaRlVXOFPkrOXGMZ6wjqbwG4cfkR4NJrFJdbqkNxqxZQObV5dGO4wWXn9mCWn1tRw1qu0I2jbmz4fUViNaXS6nXURERNqlRJFIJ7VMxngZVV3BgvHhTXi09u5XW1jdbzgzxiViWtUkypk1naV3z+DrO8/j6N0bWOZOpq6hscNjBhoRleDx8MzfnqK+0dvp+AIlXnYlp7P07hksmXMKcXEuyiYe3OljdkdnE0CRHg0msefzD76grIfU6RLpimFHTGbruAOiHcZe1lreGDSBE0YkkZiS1PEOubmwcCGMG+fU8Bs2DO68U/WJREREOkGJIpEuaErGlNx1AUsn7SEnKbJFaR/6sJz+KQlc8IOLAm5jjOHHlx7L5pQBFH5Y1uExvzu8bSIowdNIRmMt169L5vg7X+ePr3zFlrJtHR4rrcH/CImmhMzoIemcf+hIHnmvlF3bwpek6UwCKNKjwSR2uBs8/OejjeTc/CTnP/U1Bv91XpSolJ5sxMjBbK5uwNqeUafoy81VbKpu5NRTpnR+p9xcWLcOvF7YsgXmzHHavZ3/AERERCQWKVEk0l3PPAOLF0fsdJvXbuC/n29m+tTRpCTGtbvttFOmcMTYAdz3vzXUN3ja3bYyMQW8XkZUV+4dKZU3ro73fz+dB751IIeO7s/dr61m2p+Xcd3tT/F+yY69Fw5F+YVMm72I8TcuZspPC9mTmEqcp+UoptYJmZkHD6S63kvBPf/p5k+iYzdkJ++dgtckobGegbVVzvQ34BejIzsaTPq+DV+Xcecv/8bxt7/MzwpXsDutP7dmbOeO4VVRn7Yq0lXD66qoqfdQtWN3tEOhKL+Qy373EgB/fvit4Op73XADXH11iCITERHpm7TqmUh3Pf102/oHYfTI/S/h9Y7g22MTOtzWGMP1x4/m6sc+5+g5T7IrKdXvkvCNHi9PNAzm9P1T+NfMC9oc55SpEzhl6gRKv1rPw/98nsfrs3j+7+9w4MBEDi3/imfjR+L2rZa2KykNl9fD5Y0becPdL+Ay9JMPzuLE+He5n0y+3+ghKb79pFd3HHbsZOzGdfSv28PuxObP/XKKN1dx9p/fIu2E40J+Xunbmq+k19SnLvzhN3nrk3U89PkOXv9yKy5vJmfG7eGqH5zK8RMG750impJfSF5xRcC/C5GeZviW9UAqW79aR8ZxXRjFE2J7V+ZMchKrm1MHBrdq5YABUFcHHg/Ehf7/j4iISF9gesqQ4kCmTp1qly9fHu0wRKKqvtHL8Qte5ZDEeu6/8fxO7fN0fiE/W5+Cde0bOJjS4G5RV+mVlZu55qEPWXjVkZw1eUSHx6yt9/DMJ2U88PR7fGn9J8lGVVew9O4Z7R5nyertfPtf7zGgbg+7Ev0nsYLxUMHr3PJZLW9cOp6sI1suo2yt5Zg7XuOYESnc/f1pITmf9H17L1abFaWO9zTSv6GGiuQMhqQnccXRY7jyoEGMHD00ipGKhMa7q8q4fNEnPPz9ozlhYuT6dOuEbHVcEjuT09ts15n/NSIiItI+Y8yH1tqprduDmnpmjLneGPO5MWalMeYnvrZBxphXjDGrfd8HNtt+rjFmjTGm2BhzdjDnFukR7rwzIkPYX1q5me3VDcy46OhO7/P7YneLJBG0XWnp8b8/w1Bb17mlhoGUxDguP3osL87/ZpupXU06U6B3239fx1gvO5PSscZFWdrgkC4X/rYng9EDUxh3xKQ2jxljOGHHWpZ9uh5vY/vT8kSa+Fu5rDEunqr4FP6a5WbZL0/j52dlK0kkfcaIYQMA2LK7LmLnbErIlqUN3vu/YWdSmt9tgy4Gv2oVPPBAcMcQERHpo7qdKDLGHAxcAxwNTAHON8ZMBH4JvGatnQi85ruPMeYg4HJgMvAN4F5jjMb8Su/W0ABu9966N+HyUMHrjE2Gkw/o/EVoR8veb95Zy+spo7g0aScJcV17KTAuF5k1O/w+1pkCvb8vdmNN+0ms7mps9PDO2gpOnDikzcpwTaYduT8VKRl8UbYz6PNJbAj099QQF8eFP/wmifEq+Sd9y/B+zspimz9ZFbFz+kvIEuB1POhi8L/7HcydCzU1wR1HRESkDwrmne0k4F1rbY21thF4E7gYuAh40LfNg0CO7/ZFwGPW2jprbQmwBifJJNJ73XILPP54wDeyobCqeCMfuAZyVdxWXK7OnyfQm+im9ic/2ojXGKb/+LJuxTUnO7nbBXo7SmIFY8VLS6mqa+REE3hFuhPOd6acLVm3M+jzSWzo6O9JpK9JSYono66aravWROycAf8HtPowJiTF4H//e/j004jWGhQREektgkkUfQ6cZIwZbIxJBc4FxgDDrbWbAHzfm+a0jAI2NNt/o6+tDWPMTGPMcmPM8m3bOl6SWyTq6uvDduiHVu4gKd7FpbMu7dJ+/hI5xnq5bmIK3kYPj79TwnH7DSZriP9h/R3JmTWdBeM9jKqu2LtaWvP6R+0J50X325UWYy3HH31AwG2GZyRzwJAUlnywOujzSWyYk51MUmPLv3OtXCZ93YhRQ9h8WGQ+09u8y018gGXrB7iruvW/pl1DhsDQoU4SasOGjrcXERGJId1e9cxa+4Ux5i7gFWAPsAJobGcXf0Mh/M7XsdYuBBaCU8y6uzGKRMQdd8C998L69eAK7fSTXbuqKfq4nIsOy2TAwLbFPNuTM2s6NFtpabB7D5Up/fjnunr+8PNCKlIy2LNtHUX567v9hjtn1vS9Qwa7Yk52MnNLWk4xCNVF95I9CRw6ZgADRg1vd7tpm4t5hOG4q6pJ7te9ZJnEjpxZ03l81t95Ny0TQCuXSUwYPjAtIjWKPn/9fX6wZAcmLo7Exnrq4xP3PpbS4Oa2iXHkzLoiPCe/5Rb429+guBgGDw7POUREpE/wtwJuX30vGNRVrbX2X9baI6y1JwE7gNXAFmPMSADf962+zTfijDhqMhooD+b8Ij3Czp1QVQXx8ZCVBQUFITv0k/lPUNvgYcbkQd3aP2fWdJbePYOSuy5g+V+u4EpvGV8nDqAiJQOAyuR+IS0i3ZW4Foz3MKxmJwAD3HtC8gnx7p17+Hh9JSdMHNLhtid+4xjq4pP4cFN1UOeU2OBu8PB56jAuri+j5K4LWHr3jD77xkCkyfA9O9iycWvHGwbhlc/Kmf7CRlyVlTxz/Un8Lqsh9KOH2nP55U6tov79w3cOERHp9fwtuBCN66hI6faIIgBjzDBr7VZjzFjgEuA4YDxwNXCn7/szvs2fBR4xxvwRyAQmAu8Hc36RqCsogHvu2VcMs7QUZs50bufmBnVor9fyUMNQjmis5OBJYzreoRNer02BVoNnnCLSFd0aGRSMnFnTucjr5YTfvcFBmcPJmdFmVcYue/fp1/HYOE7w+C+03dwxJx5K/OubeXvtDqYd0LlV3yR2vbxqC1WuRL513TejHYpIxIzYvJ6tnpF4Gj3ExYd2/RHr9fKvJSXMf/FLDh2Wzj8umcqwkRlM6uZI1W47+GDnS0REpB15xW5q01qOPI3WdVQkBDtP5iljzCpgMXCdtbYSJ0F0pjFmNXCm7z7W2pVAIbAKeMm3vdamlt5t3ry2K6bU1DjtQXp7zXbWuWFG7qlBH6tJOItId4dxuTgleyjL1mynvtF/bYquWOIaRCoejjjliA63TUuK54ghiSx994ugzyt935PvljBqQArH7tfxaDWRvmL4eWfgccVRUduwt60ov5Bpsxcx/sbFTJu9qFufpDbU1TPv5/dx+wtf8o3JI3jsJ6czbP+xoQy96956Cy68MKw1B0VEpPfqaddR4Rbs1LMTrbUHWWunWGtf87VVWGtPt9ZO9H3f0Wz7+dbaCdbabGvti8EGLxJ169d3rb0LHnr2A4akJXDOISOCPlaTnrhy08lp9VTXe1j+zP+CPtaSbY0ckz2CpNTO1To6obKEz93xVG6KvaL5objYixWbV65hydoKvpm0s0srD4r0dsMHOkNQt+xy6hSFYtj9rtoGvvfQRzySlMW1ZiP3XHkEKYmhHa3ULXv2wBdfhOT/t4iI9D098ToqnIKaeiYS88aOdaab+WsPwoaVa3ltm4fr4stICuFw/3AWke6u44/Yj4RXy3hzWwPHB3GcjV+X8/X2anKP7vw0PW9KGrbBxeF/fo9RNTv6dEG65pou9pqGzzoXe27IL4yJ599VT6+twuuK45JTs6MdikhEffnMa8AALrj7bUbV7KDGlUhtSsv5y7UJydy2ejd5sxd1WNxz/YpivvdyGesq3fzukoOZfvR5EXomnXDuuXDmmZCQEO1IRESkB5qTnczPSxvxxO1LoUT7OiqcQrtEk0ismT8fUlNbtqWmOu1BeLi0HmNcXDnjzKCO01owS9qHS/qQgUzdfxhvulM73jiAovxCzv/rWwD8/cl3O/XpdlF+IX+r8L2wG9PnC9I1l1fcMlkITXOs3VGKqOey1vLUmt0clTWQrMOUKJLYUZRfyL0VKc4d32tkZbL/1Td3JvfrcJTRh19tJuf+j9m2dScPff8Yph89LtxPoesSEqCxEQoLwWrRXRER2Sdn1nSGJrpIaqzvMddR4aQRRSLBaCpYPW+eM1x98GD47W+DKmTtbvBQuHwDZ04eTmZ2VmjibKa7S9qH0ynZQ1nw4pds3raLEUO7tvLM3tExyc6n3FtTB3RqdExesRt3DBWkay7W5lh3V1F+IfO/amRban8G1O2hSCOuJIb4e43EBJh62aq9NiGZn6/38NMbF5NZU8lpY9J4fHcqmf3T+ff5Wew3oQcvQ//II3D11TB0KJwauhqBIiLSu22rqmOzx8Uvzj+EH52yf7TDCTuNKBIJVm4urFsHH38M27dDUlJQh3vu34uprGng6qmjQhNfL3Byf6eQ9ZsPPd+l/bxey29XN3ZrdEwsJ0uG1e7y295X51h3R1MCcluqk7jcmZQeMyPORKCd18LWI20CjLzxuOL2jjB6aEcyo10NPP2Ls9jvqB6+wlhuLrz0EpSXQ1YWuFzO94KCaEcmIiJR9M7jLwFw/MDYSKHExrMUiYRDD4Vly2DGjKAO89DXtexftYXjsoeHKLCeL/vQCYywbt6M79yKUrsqdvHPt7/mtD+8QUWK/xFIHSV8Yq0gXZMqdwO2X0abi7u+PMe6OzQ9T2JdoNfCAe6qFtOXB7r3dOp47spdDExLDGWI4REX53zoM3OmU4PQWuf7zJlKFomIxLB3Kr30a3Bz8IGjox1KRGjqmUioGAPHHRfUIT7ZsJMVJoNfX3okxhU7eVzjcnHyURN54fNNNHq8xMf5f+6fl+3iocfe5JnyRtwJSUwdN5BdZVuoTO7XZtuOEj7+CnvHeT19MllSlF9IXrGb8tSBJHkaqYtP4EdD63imtJqy1EEA/Dqr786x7o5YHnEmAoEXP7htYhw5s67Y2+aMvmubWG1tU+qAcIUaevPmQU1Ny7aaGqc9iKnlIiLSey1jAMcc2o/4pF7woUcIxM6VqEgk1NbC7bfDyy93a/dFS74mLTGOS44dH+LAer5TsodS5W7k44/Xtmh3V9fyn7sf5+K8Vzj/7iU8WxnPxd5NvDB9f5689nhu3d9FSkPLUR6dGR3TurB3en0NHlccA0f3rZFcrZezdscnEu9p5IBkD0vvnsEj35sKxtB/TGa0Q+1RYnXEmUiTzi5+0Hq7OK/H7/F61d/O+vVdaxcRkT5tY0U1pRU1HN+Ta+yFmEYUiYRSUhLcey+43XDWWV3adcf6TTz3YSmXDbf0S4695XkrX/kf2AwufaKYUQ++w/fGJ7Ft0hQKP1jPjpp09rOV3HrhUVxyxGj6p+z7+eTMmg75heQVV3S4NHNrzQt7u6uqOe/3r3HTl438t66R9KS+8fKYV+ymtlVB2oa4BPKKd5MDHDVuIP3de3j5zfWcnXNCVGLsieZMiGfuhrajKfriiDORQDq7+EHz7fYuMNCb/3bGjnWmm/lrFxGRmLPsoWeBDKb1j50VMfvGlZBIT+FywerVkJbW5V0f/2Qz9fGJXDUtdopYNynKL+S3ZUmQ4KycU5Y2mN9usbB1DWdPHsGMsQkcf+IhAafjhWIlt+R+afzueyfyzfuWcsxNz1ATn9ilpFNP1dEUqoTkJE47aASvbRrY7rS/WJPzkyvh7sfJ+6rrCUiRWBZM8r7HmD/fqUnUfPpZaqrTLiIikVdQsG+V6bFjndfjCE4FfocBDPbUcMDkrIidM9qUKBIJtW4kiTxey8OrKjl2v0EccPxhoY+ph/M36gVjGF5Tyd+vOj9icWxY/ApxniSqfZ+El6UNZm6JG3rxsuiZNZWUtf7Z0nIayFnHHcDTBR+xvLSSY/eLnSG1AfkKfefMvizoBKRILApF8j6qmi4+Zs+GykoYMwYWLFB9IhGRaCgoaJm8b1pgACLyumytZVlNAscdPj6masjGzjMViaQf/xh+9rNOb/76f9+nbGctVx+XFb6YerBAo162BljRLFzyit144lrmz3v7SldzspM7rOF00gFDScTLywUvRTq8nmnJEmcVwy++iHYkIhItubnwyitw113w2WdKEomIREugBQZ+8pOInP7r0q1s2V3HtP07tzpzX6FEkUg4fPkl/POfzlS0rKwOl9Rd9NxHjKip5MwDh0Ymvh6mpxQO7osrXe0tNLsncEHatKR4TqjawCs747A2duZeB+T1wvDhqkciEuuOPBJ+8QvoH9kPLUREpJlACwls377v9s9+5oz8bOL17rtdUOBcj3Xyuqy1ZYXOIkXHpzd2ab/eTlPPREKtoACWLu3U8Mii/ELu+KqBrf3G0q+uhuf+/p9eO8UpGIGWYY508dNA07TivR7WbtvDhKHpEY0nVDozDeSsb3+D15/5gi83VzFpZEYkwuq5Tj7Z+RIRqa11LkbGjIl2JCIisSnQAgOjR++7XVYGjc0SOYccAuecA4cfHvS0tWWpmYyq3M3YA7O6F38vpRFFIqEWaHjkvHktmppWhtmaOgCAqqRU5pbEUZRfGKFAe47OLsMcbv6maSU2NhAfH8d5f32bh19agW3+CUVv8N3vwl/+0uFmpx88CmPglVVbIhBUD7Z+PdTVRTsKEekpzjkHLr882lGIiMSu+fOdBQWaS02FO+/cd//xx+Gvf3VuWwsXXQRTp3b6usyfovxCjp+9iBc31FJZ7+WZe58M8on0LqanTzOYOnWqXb58ebTDEOk8l2tvMdwWjGkxDHLa7EV+R6+Mqq5g6d0zwhmhtKMov5C8YneL1XqOm3EhNzzyIW+v28lpjVu569YrGdovKdqhdqyxES65BI46Cm65pcPNvzmvkLqqap7763cjEFwPddppsGcPvP9+tCMRkZ7ghRec/93nR25hBRERaeXmm2HRIti4sWurnnXyuqy1pg/0W892iMYH2eFmjPnQWju1TbsSRSIhlpXlf3jkuHGwbt3eu+NvXIw1bQf1Geul5K4LwhefdIu30cODv3uYBXuG0C8lkTsvOYQzJ4+IdlidY63zD7EDs6+/j8UpYzHWklmzY+/Uv9aJs772DxJouezqkCHwpz+peK2IiIhItG3f7tSOvOUWuO22ru3byeuy1mLpA/1AiSJNPRMJtUDDI+fPb9HUr8H/SlqRLuAsneOKj+O7N13Nc9efxPCMZK556EPm/vQeamp66IpojY3Oss7QqSRRUX4hLyc4iS9rDGVpg7lhXQJz1iVSljYYa1yUpQ0O/fTIIAsMhiyGmTOdNxLWwrZtzv1oxCIiPYvXC6tWOZ9ii4hI5A0YAK+9Bt/5Ttf39Xddlpzc5rqstb64wE1XKVEkEmq5ubBwoZOpNgZGjnSy4FP3JWo//u8yqhKScXk9LXaNRgFn6ZoDhvfj6euO5/9MGY8ljuO8e9/lkw07ox3WPk2Jl8REGDQIbr+9U7vlFbupi09s0dYYn0hDfEKLttqEZPKKQ5Qca52gaSowGOkETRDz10Wkj3O7naKo//xntCMREYlN8fFwyinO+9uuan1dFhfnJJw6GDXeU1ZkjiZNPRMJt02b4KyzKLrwB+TtHkh56kBc1tKvrppfjIN7Shr6/rSePurdtdv5+ROfsnlXLT9O3Mx1N11FfFJixzuGS1PipXnSIzXV+QfZwT/EQFMh/QnZ9MhuDgcOuW7OXxeRGPH00zBlCuy3X7QjERGJLXV1zqIsl1/u1CYKxfGSOq4zesvP7uGhxKwWbbFWo0gjikTCbeRIiv7vFua6R++dwuNxOcXRUhPjWHr3DEruuoCld8/ocy88fd2xE4bwwvUnckHCTv5UN4JL711CaUV19AIKYmRMVz4hGVmzs4uBBbB+fdfawyXQG49QvCERkd7v4ouVJBIRiYbly+HGG2HFitAcLynJ+WB15MiAZQ827arlmdQsxlVvJzPKKzJHU3y0AxCJBXnFbmpbFUSri08kr7iKnOiEJCHSPyWBP/8ml1Nf+YSbl27hnL+8za2TEpl+2SkYV4Rz8UEkXuZkJzO3xN1idYeExnrAtJl+luxpYOeuGgb0bzXnuwNtVpQ7+DRyPnut7YaRTtDMn+9/JFYH89dFJEZUVMCSJXDGGZCWFu1oRERix7RpTo24wW0LS3dLQQH84AfOtGLYW/ag6L0S8uxYylMHkuhpxBufwLO3fousIbH7mq8RRSIRoIJofd9FZx7Gf39yElP6wY0ravm/O4p4+K9PMG32IsbfuJhpsxeFtgh0c14vNDQENTImZ9Z0Foz3MKrZJyd5WQ3kZdW3aJtRv46NGUP51r8+oGxnbadDbFpmtEVh7DOvpWjyqS03TE2Fc8+NbIHrUaPg2GNh9Ghnutm4cZ2ariciMeKddyAnJ3SfaIuISOeNGuUUoA6FefP2JYl8isYdxdyESXvfo9bFJ4KnkU8eez405+ylVKNIJAJiaYnFWOdt9PCvPxdy5/Z+eCwtVhwLy9zmmhrnU+7zznOSKt2sUdQV76ytYOZDy0k1lgdOHsykU47qcJ+AfwNV21n6/K3OqKexY50k0T/+4azaFsbn0MJ99zmjh9au7dS8dRGJMbt2OSufHXYYpKREOxoRkdjwxReQlwe33ALjx4fmmH7qUk774b8p6z+szaaxcp2mGkUiUTQnO5mUhpbZa61w1je54uO45oYrGFy7u82y9CFdMczjWzEvNRUOP9z5B9p6ZYcwjYw5bsJgnvi/YzE7K5m+uJRlX23tcJ+Ao+rSBzmFq71e5/vzz7dMEkH4VyC79lrn3EoSiYg//fvDcccpSSQiEknFxVBUFLrRROB3lH15xhC/m8b6zA8likQiwN+0nlgriBZrtiX389sekn86L78MEydCeblz/5574Morndu5uS0TL2EahXPgyP7855qjGTmkH1c/uJxnV5S3u32nlxndsMH/AcJV4Lop4Ravkn0i0o4PPwz/NFgREaEov9Ap3fBOHNNy/0zRU2+H7uDz5zsfsjaTuXu73027stBLX6REkUiE5MyarhXOYkinEyNd0TRUdsIE56v1CmcRlnnQBJ64/jQOHzuQHz/6Mf/4zb+xAZaT/+Zw06bN76i6SK9AdtllMKPvDysWkSA9+CD88IdOEl5ERMLCb03LkrjQ1fn0M/p+TkKZZn74oUSRiEgYBDvdcO+nKU2FsC+bBf/3f86DEybAK6/A/vuHOuwu65+awKLvHsV51euYXzOc3z7/BV5vy7nfdTVuXtjUwID6akZW72h/VJ2fT3rCugLZlClwyCHhObaI9B1z58LXXzv1LUREJCzyiluuwAshLt0AbUbf5/z1Zs388EPFrEVEwqRpOfiy1EEYa/njmBounn1Zp/abWxLX4h9lSoObBZveIqfgz21qH/UE3kYPv31uJfe/u4HzDhzMH755CMn9nCVF//RKMX95bQ33T4nn1CvO7vhgBQVOTaL1652VyBYs0ApkIiIiIn3c+BsXY03bhLyxXkruuiAKEfV9gYpZqyiDiEiY5MyaTg7wxEsfM+eNcg6Zfm6n9ssrdlPbaoWw2oRk8gYfSU4PTBKBU8T7VxcdQubANOa/+CVf/vJxalwJbE4diAWOSPVw6hXnde5gubmRSQytWgWTJvXIxJuI9EALF0JmJpx/frQjERHpkzJrKv2ukhvr9YKiIajxs8aYnxpjVhpjPjfGPGqMSTbGDDLGvGKMWe37PrDZ9nONMWuMMcXGmE58rCwi0vsdfsREAD7asNPv462nmZWlDvK7XU9ffcEYwzUnT+Cq+nWsTR/GprRBWGPAGFbt9nRvfnlJCZxxBrz/fsjiLMovZNqsRYx/cC3TZj0YunnvItK3/fGPKmgtIhJGWim65+h2osgYMwr4MTDVWnswEAdcDvwSeM1aOxF4zXcfY8xBvscnA98A7jXGxAUXvohIz7ffkDQy4iwf/6/tNFp/RfsCjXDpLZ+mvN7Qr81zcCckdW9++ZAhsHmz8xUCe3/e6b6fd7+hoS2SKCJ9UlF+IdPOuInxY6906sbpNUNEJORyZk1n7rBq5461qhcURcFW5IsHUowx8UAqUA5cBDzoe/xBIMd3+yLgMWttnbW2BFgDHB3k+UVEejyXy3B45Xo+Lm2b6PFXtA/AtKof15s+TQk08qlbI6L69YPPPqNovbtlce9uXqRFpEiiiPQpbRLMoV6FR0RE9ppw0lEAFJw4QCtFR1G3E0XW2jLg98B6YBOwy1r7MjDcWrvJt80mYJhvl1HAhmaH2OhrExHp8w4/+ziK+w1nT11ji/ZAyROL7bWrLwQa+dTdEVFF9zwRsqVSQ5rEEpGYoASziEjkfOlxXm8POPmoKEcS27pdzNpXe+giYDywE3jCGPPt9nbx0+Z3yTVjzExgJsDYsWO7G6KISI9x+KTR2HfK+XTDTo7ff8je9kBF+0bVVLL07hmRDDFk5mQnM7fE3WbVtu6OiApY3Lu4Yu+Q1c5SkUQR6SolmEVEIuerTbsYnJbI0H5J0Q4lpgUz9ewMoMRau81a2wD8Bzge2GKMGQng+77Vt/1GYEyz/UfjTFVrw1q70Fo71Vo7dejQoUGEKCLSMxw2uj8AHz//Vov2OdnJJHgaWrT1pmlm/uTMms6C8Z6QjYgK5UXanOxkjPW2aOvtP28RCa9Qj5IUEZHAvvzf+xywfX20w4h53R5RhDPl7FhjTCpQC5wOLAeqgauBO33fn/Ft/yzwiDHmj0AmMBEI3TI2IiI9WP/URCbs2cpHG1q258yazl/mFbGhvhGPy0VmTSVzspN7zTSzQHJmTe/yaJ9AQjkKaPKl52D/9Bb966rZnZjSZ37eIhI+oR4lKSIi/nm9ltX9RzJ9YF20Q4l53U4UWWvfM8Y8CXwENAIfAwuBdKDQGPN9nGTSpb7tVxpjCoFVvu2vs9Z6goxfRKTXOOKkw3iteDvWWoxvVbDynbWUeBK44ZwDmHXaxChH2DP5u0gDGDW4H7X1HlISO7+AZtHfnyaOQbz6m4s0pFlEOiVn1nTILySvuIKy1EEA/HZsPTmzrohyZCIifcvGylpqrIvsU7TmVbQFteqZtfZWa+2B1tqDrbVX+VY0q7DWnm6tnej7vqPZ9vOttROstdnW2heDD19EpPc4fNxgdlTXs35Hzd625x97DYDzDxkZrbB6vNZT2TKrKzg7aQ8f1CVy8b1LKfl0daeOY63lmd1JTKsuU5JIRLokZ9Z0lt49g79OaABjmHTiEdEOSUSkzyle51StyR7RL8qRSDBTz0REpAsOH+Dk5j8uep1x378AgMWrtnJoYyNZQ9OjGVqP528q25tfbeMn9y/jgge28Ltz9nDumYe3e4wPSyvZGJ/Ozy47LmxxikjfNvniM+EPb7LSm8rkaAcjItLHFD/7KjCSA9KDGs8iIaDfgIhIhByw3wjSGt18tLUWgHXbq/k0dTgXnDM1ypH1TicfMJTnvz2ZiclefvRaOb9ZvIr6Rm/A7Ys+2khygouzDs2MYJQi0peMH5xGamIcq8p3RzsU6YKi/EKmzV7E+BsXM232IoryC6Mdkoj4UTxkHKNd9aQP6h/tUGKeEkUiIhESlxDPlOxRfJzuJCqe+9RZ+PG8EydFM6xeLXPy/jz+m0v57rQs/r20hMt/9gDlq9a22a6hppbn3/qCMxP3kJ6kwbQi0j0ul2FS4y5W/u+DaIcinVSUX8jckjjK0gZjjYuytMHMLYlTskikBypuTCT7gNHRDkNQokhEJKIOHzuALzbtprbew+Ln3uOotEYyB6REO6xeLTHexa0XTOaeQxMoTujP+Y9/xVtfbWuxzVufbaQyOZ2cAwZEJ0gR6TMmmxpWJQzA67XRDkU6Ia+47WIItQnJ5BW7oxSRiPhT767n6617yB6WFu1QBNUoEhGJqMPtbhq9lqce+i/FiQP5TUJFtEPqM8678iwOPHE7P3pyFVff/z4/zopjXN0u/rC6jrLUQbiw7NxWGe0wRaSXm5xzOoue+ozSHTWMH6ILmp6uPHVgl9pFJDq+/uBzGi1kl6wEDop2ODFPI4pERCJo04ovAbj5Ky9YCykaTRRKE8YMoei6aVw8NoW/lHi4YWMKZWmDwRi8xsXNmm4gIkGanOnUzlhZvivKkUhnZNb4/4AgULuIREexcRLv2Se0vziJRIYSRSIiEVKUX8gdW32fPhsDxrBgvUuJixBLSYzjD/93CgPce/C64lo8pukGIhKsicPSiPd6WFn4QsTPraLMXffDiSnOBzPNpDS4mZOdHGAPEYmGr6ot8S7DfpP3i3YoghJFIiIRozoJkWNcLnYlpfp9TNMNRCQYSQnxTPTuYWViZF9L+kpR5kgnuxqHDAVjGFazE2O9jNq9lQWZNeTMmh7W84pI1xR/uYH9BiSRGK8URU+gGkUiIhGiOgmRlVlT6Uw789MuIhKMycdM5o3irVhrMcZE5Jx5xW5qW72mOR82VJATkQiC15TsanoeTrLLDfmF3UrcFOUXklfspjx1IJk1lczJTm5znP8sWc1k4Pl7r9k3sihCvzMR6bzi1eVMMXuA06MdiqBEkYhIxChxEVlzspOZW9JyFJemG4hIKEzOzODJDzeydWcNwwdGpqB1X/iwIVCya25JHe/dVkCiCxKPPJzEeBeJn64gITGBxCMOIyneReLnn5GYmkziIQeTGO9i+cPPcn/9EOrTnJ+/v6TTmq1VfJaRyS2Hpjsna0oQ7dgBH3wAZ58dsecuIoHtqWtkQ/oQLjs4K9qhiI8SRSIiEaLERWTlzJoO+YXkFVe0+2mziEhXTa7dDsDK595g+FXnReScfeHDhkBJrdr4RF6taqTeFU/9u+up93jxeH3Jnee/8G3lAurhs4989zPbXMm0HmH1n4/KiHMZLrzg2JYb5uTAkiXO7bFjYf58yM0N6rmJSPet3lIFwAGHZ0c5EmmiRJGISIQocRF5ObOm95opGSLSe0yaMgFe3cpKk85pETrnnOxkfrGunvr4xL1tve3DhkDJrlE1O1h694wWbZ6GRhrqG6hzxVPf6KW+fBP1XqgfOJj6Ri8X3v021s8UsqZklLfRQ9Hrn3Ni5gCG9kvat0FBASxfvm8aWmkpzJzp3FaySCQqij90VgU+cFhkRmhKx5QoEhGJICUuRER6v35DB5E1OJVVpEfsnDmzpvP4zx/gXTsYiyHOelkw3tOrPmyYk53MT9d7sa59xWoDJbviEuKJS4hn7yPZWS0ez6zZ0e4Iq3eXfka5K4VfJu1sucG8eVBb27KtpsZpV6JIJCqKl35Mqnc4owf6X4hEIk8lxUVEREREuuigzAxWbozctK9Gj5cv+2dy/pRR3DylHx5XHMeeeVTEzh8KZ8/8JsZlSK+vdVYgq67odrJrTnYyKQ0tVw011nLdxBQA/rPVkJ4Yx1kzWk0NXL/e/wEDtYtI2BXvdwgTh6fjio+Ldijio0SRiIiIiEgXTS75nPU769i9pSIi51v21VYqaxo4f0omxwxzplK9t3JjRM4dKh+vr8SL4e6ZJ1Fy1wUsvXtGt0dE5cyazoLxHkZVV2Csl6G1u8DAk+tqOH72Qzy5fAPe6mpeun9xyx3HjvV/wEDtItFSUABZWeByOd8LCqIdUcgV5RcybfYilpXuYvXWPRTlF0Y7JPFRokhEREREpIsOOsIpurpqy56InO+5vz9FuqeOkycOYdKpR5OeFM/7ZkBEzh0q7732AQY4Mis0K7XlzJrO0rtnUHLXBXzwlyv5Rs0GPkocQnnaIDCGmoRk5pbEtbz4nD8fUltNb0lNhV/9Cl59NSRxRYS/JEIMJBZiRkGBUzurtNSpp9VUS6sP/U6L8guZWxLnTCEN9PcqUaMaRSIiIiIiXTT5xMPgrddYudvLsR1uHZz6Ri8vpY7lTFNJcqLz9v3IcQN5v2RHmM8cWu+vKOUg4shITgjL8VfYtoVwW6+EtrcO0bx5znSzplXPPvkErr0W1q6F0aPDEl/INCURamqc+6Wl8N3vgjFQX7+vrZcV6S7KLySv2K0FP8Dpn02/3yZ9oJZW89+xyybjSWg51azN36tEjRJFIiIiIiJdtOzBZ3F5U/jt4pX8+/G3w3pRu3TNdnZ7XZx/9dl7245p2M7vtloqSssZPC4zLOcNpfpGLx8NGkfugf3Ddo5Nqf5HKpW3bs/NbXuxfdFFcPrpPT9JVFMDv/hF2yRCQ4P/bXtJYqFpdEmtr0B5Wdpg5pa4Ib+ww7+rvpBgavMcUrPIobTthr24llbr37Gn7aKFgJ+/V4kKJYpERERERLqg6YLHm+BUcejKRW13LH5rFf2S4zlx4tC9bceMGwAllXzw1Ra+0QsSRZ9u3Eldo5ejD9svbOfIrKlsdyW0dqWnwze+4dx+913YuBG+9a0QR9hN1jqjhQDOOAPKyzu/by9JLOQVu/cmEJrUJiTzs/Ue7pn1bzIG9Sdj/BgykhPI+OAdMg4YT8akA1i77BOerkikIc0ZTRbuv8Vw8JskO2c2ADlfvNly495US6ugoMXIvbzzfk1tvyEd7tapv1cJO9UoEhERERHpgrxiN7UJLZd0r01I5rbVHqbNXsT4GxczbfaikNTacFdV88oX2zi7ah2J8fveuh9yxrEkJ7h4z50Y9Dki4b3n3gbgqHEDwnYOfyuhpTS4mZOdHGCPAG6/HW65Zd80rmj617/g8MPB43Hu33ILDBvW+f17SWIh0CgSr3GxP7UkJ8azfU89n6yv5DnvIP62zsOCF7+kcFcyDfEtpzI605fcfo/XEwV6Pck7+eqWG7pczqi33sBPjaXy9EEd7tatv1cJC40oEhERERHpgkAXtTuT+7HTN/IjVCMb3irZSVVSKuef1HJKVGK8iyPGDuS9tZFZdS1Y76/dzsR6GNwvfBeBObOmQ34hecUVwU1Deuwx2L0bEsOchGs14oL58+Hkk+G+++BnP4PBg2HIEDjgANi507l/zjnwxz+2rFEEkJDQskYROEW6588P73MIkUCjwUbV7OC+/OvatFtrqan3cPCvXsKatnOYetP0pUCxlmcMgXHjnP4xerTTF844I8LRddNNN7WZHpm5eztl/dsmOeO8HrzG9Nppg32VEkUiIiIiIl0Q6KKWVheswRRmbapZUpY6CBeWiq83AMe12OboynX8pSKNXZu3039Ex1M6oqXR4+XDjNHkHNyFkTDdlDNrevCFcNPTnS9rnQveww6Dyy4LPrjm/BWknjnTOd+dd8Kxx8IFFzi1ky66qOW+gQpyg7P/hg3OqKM//KFX1CcC+OEYF7dU2BZ/Q+2NLjHGkJYUT2bNju5PN+wh2p0yuW7dvobmUxDfeAMmTIAxYyISY6d88omTYD3pJKcPtjLnzQeZe87sFqOnUhrcLBjvUXKoB9LUMxERERGRLvA3xQlr/W7bnZENrZeN9hoXN/tZNvqYQ8ZijYvl63r26merNu1mT10jRx8wPNqhdE1dHSxZAkuXhv7YgVa1WrgQNm92kkTtyc11kgher/O9qUB3SQmMGgWnntprkkQANcccB8YwrGYnxnoZVV3RqQSCv7/FpMb6XjV96WfZyW1eP/wmyZqSRPX1MGPGvlXtwqgovzDwdNpNm5yEVZPrroMbbnBu+5nymPPFmyx4+35GVVd06Xcs0aERRSIiIiIiXeBvilONK5HKlH5tts3cswOyslqO/Ah0Ab9rF/zpT+RtH09tessRQv5GJx1+xjEkLnmZ93d46MmVS95/4hUglWNGt/359GjJyfDyy853gMZGiG97+eR31a2BDS1G/BRd+APy7NiOV7XasAGGDm3b3lkuF7z6Kowf3/1jRJi1lsc+2MDUcQN58trzurRv679Fi+GEgfSq5MPws0+Df73HIHcVlUlpHU/BSkx0+mVKinO/sRHi4tqMaAxWhyvRzZsHRUWwbZtz/vvu29d3589vOz0yNZWc668gpxclMGOZEkUiIiIiIl3UeoqTc1HlbjOtYs7bDznTimDf9KKaGrjmGmdkwDnnwDe/CT/6kVNn5o47KP/pU37P2Xp0UnJCHFPG9Oe9LzfBuZNC/AxD573t9WTV1DJ8cC9LFMG+i/GtW+HMMyk69TLyPKP3JnxOja/iKdeIthfTCxeS4/u9F6VmMTdh0t6+EfZVrbKzgz9GBL27+C1Ktlcz6+iR3dq/+d/i1QuXUbyxAuv1Yly9Y/LMC5+Wk5oYx7LfXkpyQlzndjrwwH23r7sOamvhgQecRGEQmic9XTYZT6t4ahOSyfvSl7C+4QaYPXvfOQ89dN+GgaZHKknUa/SOvx4RERERkR4sZ9Z0Foz3tJxW8fb95Hz2WssNa2qcQsXgjAxIS4OkJOd+airs3h2wvoq/9qM3ruKzzXuo3rErlE8nZLxeywdJQzn6pCnRDiU4qakUjZzC3LhsytIGY42LsrTBFCSO9b9i1bR9F8R5J1/duVWtQll8+l//gl/9KjTHCrPHPt5Ev7oazp2SGfSxLqgtZWO9i09eeTcEkYWfp6GR/769ilPNzs4niZqz1qlTNGZMSJJETVNerXHhcfmPpzzNl7A+6CBnRb5AI5n8TY+UXkMjikREREREQqBNIWXXd/xvWF297/azz7Z8LDmZOdnJ/kcn+am70ui7oJt819uMqtnR41YN+mprFTtrGjh6vJ/i371Jejp5E89ok/Cxxv/FeXnGEL+322zTtKpVqEdcfPghfPop/PrXIZ+S1B6/0/Da6Y+V1fW82NCfy08YSUr/4EecnXXF2ST++R0W1/fn8KCPFn7vf1FGRXI/zt2vmwcwBm6+ed/9L76Ahx6CRx7psF+1/l1VxyVRm9xxbafeVChcuk+JIhERERGRcBg7dt+0s9bt7ejsMu9F+YU8WDMAEgBj2tYQibKi/EJuXWMhOZ28B98g/p3EHhFXd3WlMHnm7u0tbvtbFrzNqlah9Je/OFMZIyhQTZvlP72H/zX289uX//PheuobvVx+XHczJS1lDBvEKQcO5/nPNnHzeQfhckUuSdYdL5ZUkZzg4pTLzwzNAa+6Cj76aF9x7KbprtAiWeTvdxWoIH9z7a1EJ32Lpp6JiIiIiITD/PnOdKLmOjm9KGfWdJbePYOSuy5g6d0z/CZY8orduBOSWrQ5Ra/dbbaNtKYL0V3J6QBsSR3IXD8rt/UmgUZSGH8rVi0t2Ht/zpsPtlmZK+wX3E1Jok5c/IdKXrHb7xS7hxPHtZiuN7ckjpt/eg/TZi/it89/SYKnga/+81LI4jh/Qn+27K7jg5eWheyY4eBt9PDiJxs55YBhpCWFaPzG1q1tf+c1NU6toGb8/a4CjTyL83q0SlkMUqJIRERERCQccnOd5c7HjXMuwsaNc+6HaHpRoBEuXRn5Ei6BkgY9IYnVXf6WYk9pcJNbX9p2ye8bv7v3955Ts44FDV9Eflnwhx92Clu7I/MzD9jvWiUgmiePMIaGuISQJhHPOGg4KQ1uFn+wLiTHC5cPX3ibbbUezm3cFLqDbtzov339+hZ3y1IH+d/OT9LzD2Pd7SaspW/qdurSGJMNPN6saT/gV8AiX3sWsA6Ybq2t9O0zF/g+4AF+bK39b3fPLyIiIiLS4+Xmhq2Ia2ZNpXOx7ac92npyEqu7Ak8JvM7/Ds1+7zm+r0gq+nwreWfcRPmtr3SqXlCwhtTuZlvqgM5t7Cd5lFdcEZKfUerADE6fMoYXSndxm8dLfFz0xka0V7Pphdp0EqnitAtOCN0JA0x3LZp6LnmzF1GeOpB+9bWQlOZ39wHuKtK8DZ2uMSV9V7cTRdbaYuAwAGNMHFAGPA38EnjNWnunMeaXvvs3GmMOAi4HJgOZwKvGmAOstZ7gnoKIiIiISOzpStHrSOvJSaxgtClY3kMV5Rcyt2EctRlOXwh3/apN26twxyVgrLdFge/W99sTyiTisM0b2FGdzP43vRC1Iu+BajaRX8iFP7qUl77exckHjSR9SAiTp/PnOzWJamr2xXHwacw98bt7Xyd2J6VhvF7ivR4a4vfVsUppcHPbxDhyZl0Runik1wpVevV0YK21thS4CHjQ1/4g+5LnFwGPWWvrrLUlwBrg6BCdX0REREQkpuTMms6C8Z59U5qqtrEgtbxHjACYk52My9vy8+CeksSKBZGc+ldb72HmoyvwpqXzi5QtLabY5davbzNdz1iv3+OEKolYlF/II1t8I5b2FnmPfH2sQL+D21Z7OOanj7Jpl5vlH60NbVx+prvmnTSj7Wp9LhdpDbWRnw4pvUaoVj27HHjUd3u4tXYTgLV2kzGmqcT/KODdZvts9LW1YYyZCcwEGNvBqhAiIiIiIrFq7wiX6moYNarlUtlRdOGPLmXuvOcw9W5q4xM1jSXCIjX1z3q93PCPN/i83M0/Z0zl9Enncm2rbaa2mq53anwVT7lGhG0kXF6xG3er0WyhnNrWkS273Tz/6aaAdYB2JvfbO/WuMjk99CO9Wk13Lb9xsd/NdiWn88ldF4TmnNLnBJ0oMsYkAhcCczva1E+b3zL81tqFwEKAqVOnRq5Uv4iIiIhIb5SW5hSszciIdiQArPpqI7XWxZ++fQwXHz462uHEnEhN/fvrXY/y/K4BzD20H6dPGu53G3/T9Vonj0KZRIxGfazK6npe/HAdix97jXczxmAxxHs9NMb5udwOY30mf/rqNFAJr1CMKDoH+Mhau8V3f4sxZqRvNNFIYKuvfSMwptl+o4HyEJxfRERERESakkTWBlzqOlLeeeJVYBjH9Y9uHLEqEvWrnv90E3/aNYBvpu1h5uXndGnfcNZ6ilRipMrdwCv3P8uz22CJO4VGr2W/5P78eHANF1x9Dp8XvsjcksaW074C/G2GM4nVk2uZSc8VikTRFeybdgbwLHA1cKfv+zPN2h8xxvwRp5j1ROD9EJxfREREREQAbr0Vli2DV16JahjL+o9lP/duRuznt9KEhFnzFdrKUgcRZ70hrUHz+fur+PniUo4cN5A7rvkGxhW9lcVaC2dixL17D6+/9D7P1vXn9eKt1DcmM8q9i++ffRAXTsnkoJEZGF8iaH8/q+TVuBKpTOnX5rjhHN0TeLU+TQOVwIJKFBljUoEzgf9r1nwnUGiM+T6wHrgUwFq70hhTCKwCGoHrtOKZiIiIiEgIjRgBEyZAYyPEh6ocadc0eLy8v72Bi4/aPyrnF0fTqJ37fv1v7qodzsk5J4XkuFs3VfCDhz9icGIif/v2aSTFx4XkuKHSJjFSvYM5+8WRM+vbndq/9ZL2P90/gYFnnsriTzfxyifrqSaeoWmNXHn0WC6Y0I8jDhyFifP/M2g9cspZCS3yo3t6y2p90nMYa3t2CaCpU6fa5cuXRzsMERERERHphA8/+JJvPrWWe684jHOnaERRtC17cwVXvriRB644hFOmBLdQkLvBw2UL32V1WSVPnjWcg045KkRRRoC14HZDSkrATfYuae9nulj/lATOHZfKBWk1HJNzGnEJ3UvEtk5EaXSPRJMx5kNr7dTW7dH5mEFERERERMKjoAB+8QvYtAnGjoX581usghRu7yxeAozkuEE9ZzpSLDv02MmYlzayYlsdpwRxHOv1cuND77Fiw07+ftVUDpo8IlQhhp/XC1OmQEkJ1NQE/LvIK3ZT27q+kTEMrt3NO7dfRmJ88H1ao3ukN1CiSERERESkrygogO9/H+rqnPulpTBzpnM7QsmiZcMP4KAdVQwcMzIi55P2pSfFM3FgEitWrIUzJnb7OPfOX8Qz1UOZc9RQzu5NSSKARx+F4mJoaHDu+/4uit4rIc+OpTx1ICNqdrEpwJL2O5LTQ5IkEukt1NtFRERERPqKefP2JYma1NQ47RHgbvCwfFM1xx8+PiLnk86ZUlbMJ+t3Yr3ebu3/35WbyaseykWu7fzo4jazVHq+efP2JYl8isYdxdyESZSlDcYaF5vSAq88pqXkJdYoUSQiIiIi0lesX9+19hD76O1PqG/0cvzo9IicTzpnyilHsiOlHxsra7u876ovN/DTxz9hypgB3PXrb/eoFc46zU//zzv56pa1iACMwbSq4aul5CUW9cK/chERERER8WtsgGLFY8ZE5PTvvP4xcV4PR41SoqgnOezoSQB8snFXl/bbvn4z19zzPzLqa/nHVUeSnNCzVjjrND9/F+UZQ/xuarGMqq7AWC+jqitYMN6jYtMSc1SjSERERESkr5g/36lJVFOzry0piaKLriFv9qKwr7S0LHMSh9bW0m+o/1ovEh3ZI/qR6IIVS1dwwZTMTu1T1+jhh8+vpSJtAE+eMYxhGb14VI2fv4vM3dsp6z+szaajaipZeveMSEYn0uNoRJGIiIiISF+RmwsLF8K4cWAMjBtH0cybW9RiKUsbzNySOIryC0N66j11jazYuIvjDx4d0uNK8BLiXBy8cyMrPivt1PbW62XeE5+wvHQnf7jyKA4+49gwRxhmfv4u5iSUkdLgbrGZppmJOJQoEhERERHpS3JzYd06Z0nwdevIs2Pb1GKpTUgmr9jtf/9uKMov5ORfPEGj1/L4Cx+HPAklwTvs+EP4bPA4Gj0dF7T+x+0P8OSKzfzkuFGcd2gfWb2u1d9Fzl9vZsF4j6aZifihqWciIiIiIn1Year/1ZzKUwfCZ5/BIYcEdfyi/ELmlsRRm5IGwPaUDOaWuCG/UBfdPciUg8fx788/4astezgoMyPgdq9/uYUFNcM5r76cH59/TgQjjLycWdPJiXYQIj2QRhSJiIiIiPRhgZb2zqzaDqN908TefhsefrjNEuKdkVfsDvuIJQneYSOcRN6KV98LuM1XG3fw40c/YfKoDH5/5/dwxelyUSQW6S9fRERERKQPm5Od7L8Wy0FpMNA32uiBB+DGG6Fp6fP168HjgYICyMpy2rOynPuttDtiSXqMscMyGODewyeflbRoL8ovZNrsRYy/8TnO+cvbmNoa/jFjKimJvXSFMxEJmhJFIiIiIiJ9WM6s6R3XYvnHP2DpUoiLA2vh3HPhqKOclaJKS5220lLnfqtkUWb1Dr/nDTSSSaLDuFxMmTSaFaMO3NvWNG3QKXRu8MTFU++F9x5aHMVIRSTaVKNIRERERKSP67AWS9OIIXCSQr/5DVx7bYvlxAHn/rx5TmFgnzkT4pm7seX0M60e1TNN2W8o+a+vprqukbSkeGfaYNrgFtvUxSeSV1yl2j0iMUwjikREREREZB+XCy65BLZt8//4+vX7bltLzk9ztXpUL3FYqgevhc/f+ADQtEER8U8jikREREREpK2xY53pZq1lZMC4cbBhAyQmwh/+QM6s6zQCpRcoX7ocGMRlr1cw/PmHMckZWNN2O00bFIltGlEkIiIiIiJtzZ8Pqakt2+LjYdcuZ1SRtVBXB3Pm+C1yLT1LUX4h87f4fp/GsCV1IF7jIt7T2GI7TRsUESWKRERERESkrdxcWLjQGT1kjPO9f/+229XWOnWLpEfLK25ZRwoAY0ivr9G0QRFpQVPPRERERETEv9zcFoWrcQX4nLl53SLpkQLVHdqVnM4nd10Q4WhEpCfTiCIREREREemcsWO71i49RqC6Q6pHJCKtKVEkIiIiIiKd469uUWqq0y492pzsZFIa3C3aVI9IRPxRokhERERERDrHX92ihQtbTk+THiln1nQWjPeoHpGIdMhYa6MdQ7umTp1qly9fHu0wRERERERERET6DGPMh9baqa3bNaJIREREREREREQAJYpERERERERERMRHiSIREREREREREQGUKBIRERERERERER8likREREREREREBFCiSEREREREREREfIy1NtoxtMsYsw0ojXYcYTIE2B7tIKTPUb+SQNQ3JBzUryRY6kMSDupXEiz1IQm1ntinxllrh7Zu7PGJor7MGLPcWjs12nFI36J+JYGob0g4qF9JsNSHJBzUryRY6kMSar2pT2nqmYiIiIiIiIiIAEoUiYiIiIiIiIiIjxJF0bUw2gFIn6R+JYGob0g4qF9JsNSHJBzUryRY6kMSar2mT6lGkYiIiIiIiIiIABpRJCIiIiIiIiIiPkoUiYiIiIiIiIgIoESRiIiIiIiIiIj4KFEUZsYYE+0YpO8xxvRrdlt9TPYyxgxqdlt9Q0LCGDMp2jFI72WMOcUYMzTacUjfYoy5yhhzSLTjkN7LGPNzY8xZvtt6zyQhYYzJMsYk+2732nxLrw28pzPGXGSMeRCYEu1YpO8wxpxjjPkfcI8xZh6AVUV6AYwx3zDGvAX82RjzB1DfkNAwxtwNvGCMyYp2LNK7NHtdygXqoh2P9A3GmCnGmBXAN9G1jHSDMeYsY8x/gRuBGaD3TBI8Y8wZxpj3gL8ATwNYa73Rjar79OIaQk2ZaGPMqcBvgYOB44wxA6MamPRqxhFnjPkh8BsgD7gHp299L7rRSTQ16xszgduAPwA3A0caY86JanDSa/n5VHUQUAmcYYxJikJI0ov4XpdcxpgrgELgbmvtNdba3dGOTfqMc4F7rLU51toV0Q5Gegffa1OiMeZ24Baci/mZQKkxJkEjiiQYxpgxONdpd1lrLwL6GWMuiXJYQVGiKESMMaZZJroEOBuYAxwDHBq1wKRXa+pX1loPsB640lr7grX2PeBVYEBUA5SoadU3lgAnWGufAdzAVmBl03BXvfmRzmr+v8wYE+drfhe4D2dUyMRoxSY9X7PXJS9QDiwC1vgeu9QYM9oYk9C0bRRDlV7ET185ENjse+ynvpFr/SMfmfQWzV6b6oFnrLUnWmtfwPkQ5HJrbYNGFElXtXpt2g9YgXN9BrAJWN30P683MvqbCJ4xZhZwOvAW8Ki1dnOzx+4CqoF/WWvLohSi9ELN+tXbwCJr7XbfhZux1jYaY/4OfGmt/VNUA5WIa/Wa85i1dpOv/QggH4gHPgAarLU/Mca4evPQV4mMZv3qTaDQWltujEnEGT59NfAjIBH4CHjbWrstasFKj9P6fxbOBdj3ge/hfKjxGc5r03Zr7TV6XZLOaPW69IS1tswYswBYC5yHkzAaCCQBM/W6JK21854pwVrbYIx5BfijtfbFaMYpvUurfnU/zvujvwINwAk4H5LsAFzW2kujFWcwNKIoSMaYi3HeQP8VZ+TQzcaYw5ptUgAcgDOyqPl++iRNAmrVrw4BbjPGHOYbPdIkCXiv1X7qV32cn9ecec1ec5o+GTsa+AXwHWPMVF2MSUda9aspwE3GmCN9n74ut9ZuB1YDPwbmA3qtkb38/M/6NbA/8BzwP+AK3xvl7wM5vr6l1yVpV4DXpbE4n9pfCayx1l7ru52Bc3Gm90KyV4D3TE31YxuNswBIKeAJcAiRNvz0qzuADGvt5TjXZv+y1p4JfBunHMTJvv161WuTEkXBOwa4z1r7P5waISU4b6QBsNZ+ivPJ/sHGmNOMMTf62jWUS9oTsF/5RhMlAWOAj3xD+X/ge0z9qu/z1zeuB7DWllhr1/tuV+PUB8mIUpzSu/jrV9f6HjvPGPM2TtHPIpypaKo3I8217j/rgDnW2nLg19bajwGstTtw+lB6dMKUXqZ1vyoF5lprH8OZ1pFgjBnuSzq+A4wDvReSFtp7z2R9r0kpwKnQu1eokohq3a++Bub5HssAVgJYaxtwPjAZ77vfq16b9MfQSa0zgM3uf43zSQbW2lLgeSDNGHNhs80fBX4APA4M8Xc8iU3d6FcX+R4/EBiMkzx61ndb/aoP6WLfSG31moMx5mZgMrAq/NFKb9HFfjXAGHMcTsHPZdbaw6y1M4ARwKTIRS09RRf6z2KcQp4XWmvdzba/Bed16cvIRCy9QRf61bPAUGPMCcDvcaZ4zPX1q2/hTE+TGBTkddrDwNHGmGSNdJTmutCvngPSjTHH+x6b46udNg9neto7kYs6dJQo6rwWP6tmGcEngZpmF/CbgDeAg4wjHedN9mfAodbaOa32l9jW1X41yfcitR/Ohdp44Dxr7V2t9pfer8uvOQDGmHOMMUtwprx+q3nNNBG61q9eB04CCqy1Nzbb7eKmESISc7r7unSiMeZ/OK9L37TWbolMuNJLdPV16Xjfa9ACnKRjKnCGXpdiWreu03xtKcBjaPqZtNXVfnW8b8Tjw8AVwATgLGttcWTCDS0lijpgjDnaGPMwsMAYc4jZt4pQ02owlTiFPq81xhhr7S6cIdXJvs7kBq631p7XVDxNJIh+leLrV2twVrm6Vv2qbwmmb/ge/wL4obV2hvqGNOlmv0rD+V/mNcbENe3TfISIxIYQvC6tA66z1l6l1yVpEsTrUho4UxmttX+z1s611m6MxnOQ6AritSmp2UX/M9baf/imCYl0t1+lAv0BrLX34hTX/57txYtZKVEUgDHGZYy5Ffgn8CLOSh3X4RTTo1lR4RTgvziZxIXGmEzgcJzhsFhrG621WyMcvvRQIexXn1lrP4hw+BJGIegb9b7t1llrP49w+NJDhaBfNTZtpyH5sSeEr0sbrLWaBitA6PqVxK5Q/W9rta3EuBD0q70fpFlr6yIYelgoURSA7w3xRuA71toCnFVexgFNmUSMMbfhZBOHAz8HtgCPADuBOyMbsfQGIehXCyIbsUSKXnMkHNSvJBjqPxIO6lcSLPUhCQf1q5biox1AT2KMycGZT7/CWvs8ThHqOmNMkrW2whhTBYz0bTsMZ679j6y1a32HuNkYk2qtrYlC+NJDqV9JIOobEg7qVxIM9R8JB/UrCZb6kISD+lVgGlEEGGOGGmOKgJ8BO4D7jTEXW2trfMPt64wxCcBooBjAWrvVWnultXatabaUYl/sJNI96lcSiPqGhIP6lQRD/UfCQf1KgqU+JOGgftUxjShyTACWWmvzAIwx1cAcnGFlTQ4EtlhrvzLG9AMmWWvf9xWwUt0G8Uf9SgJR35BwUL+SYKj/SDioX0mw1IckHNSvOhCzI4qMMTOMMacYY1KBD4FFvvY4YBXOcvYYY5qSaYNxlsH7DrAMOMTXSbQcueylfiWBqG9IOKhfSTDUfyQc1K8kWOpDEg7qV10TUyOKjDEGGIFTcMoLrAWuwVm+fosxJs5a6zHGTAIGgrNqmW/3s4ErgDog11r7acSfgPRI6lcSiPqGhIP6lQRD/UfCQf1KgqU+JOGgftV9MTOiyNcJLNAPKLPWng78CGdO4sJWm58FPOnbb7iv7TngCmvt92Ktk0hg6lcSiPqGhIP6lQRD/UfCQf1KgqU+JOGgfhWcPj+iyDd07DdAnDHmBSAD8ICTLTTG/BgoN8acbK1907fbHqDEGPMb4BJjzDnW2qXRiF96JvUrCUR9Q8JB/UqCof4j4aB+JcFSH5JwUL8KjT49osgYczLO/MOBwBrgt0ADcKox5mgAX5bxN8Btvn3igO/hZBQzgFOttRsiHrz0WOpXEoj6hoSD+pUEQ/1HwkH9SoKlPiThoH4VOn19RJEX+L219iEAY8zhwHjgV8B9wJHGWdruaZzOMw7nZ/I3YJG19qPohC09nPqVBKK+IeGgfiXBUP+RcFC/kmCpD0k4qF+FSJ8eUYSTTSz0ZQkBlgJjrbUP4AxFm22dpe1GA15rbam1dq219ifqJNIO9SsJRH1DwkH9SoKh/iPhoH4lwVIfknBQvwqRPp0ostbWWGvrrLUeX9OZwDbf7e8Ck4wxzwGP4nSqpsroIgGpX0kg6hsSDupXEgz1HwkH9SsJlvqQhIP6Vej09alnwN55hxYYDjzra64CbgIOBkqstWWwd86iSIfUryQQ9Q0JB/UrCYb6j4SD+pUES31IwkH9Knh9ekRRM14gAdgOHOrLIt6CM9xsSVMnEeki9SsJRH1DwkH9SoKh/iPhoH4lwVIfknBQvwqSiZUEmjHmWGCZ7+t+a+2/ohyS9AHqVxKI+oaEg/qVBEP9R8JB/UqCpT4k4aB+FZxYShSNBq4C/mitrYt2PNI3qF9JIOobEg7qVxIM9R8JB/UrCZb6kISD+lVwYiZRJCIiIiIiIiIi7YuVGkUiIiIiIiIiItIBJYpERERERERERARQokhERERERERERHyUKBIREREREREREUCJIhERERERERER8VGiSERERKQdxhiPMeYTY8xKY8wKY8zPjDHtvocyxmQZY66MVIwiIiIioaJEkYiIiEj7aq21h1lrJwNnAucCt3awTxagRJGIiIj0OsZaG+0YRERERHosY8wea216s/v7AR8AQ4BxwENAmu/hWdbaZcaYd4FJQAnwIPBX4E7gFCAJuMda+/eIPQkRERGRTlKiSERERKQdrRNFvrZK4ECgCvBaa93GmInAo9baqcaYU4AbrLXn+7afCQyz1t5ujEkClgKXWmtLIvlcRERERDoSH+0ARERERHoh4/ueAOQbYw4DPMABAbY/CzjUGPMt3/3+wEScEUciIiIiPYYSRSIiIiJd4Jt65gG24tQq2gJMwan96A60GzDbWvvfiAQpIiIi0k0qZi0iIiLSScaYocDfgHzrzN/vD2yy1nqBq4A436ZVQL9mu/4XuNYYk+A7zgHGmDREREREehiNKBIRERFpX4ox5hOcaWaNOMWr/+h77F7gKWPMpcD/gGpf+6dAozFmBfAA8BecldA+MsYYYBuQE5nwRURERDpPxaxFRERERERERATQ1DMREREREREREfFRokhERERERERERAAlikRERERERERExEeJIhERERERERERAZQoEhERERERERERHyWKREREREREREQEUKJIRERERERERER8/h8COrnamGOQsAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 1440x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ex5_pandas.query('ticker == \"tsla\"').set_index('Date')['closing_price_interpolated'].plot(color='red', marker='o', linestyle='dotted', figsize=(20, 5))\n",
    "ex5_pandas.query('ticker == \"tsla\"').set_index('Date')['closing_price'].plot(title='Missing imputation\\nRED dots', marker='o', figsize=(20, 5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "ex6_sql_query = \"\"\"\n",
    "SELECT\n",
    "     date(Date) AS Date\n",
    "    , ticker\n",
    "    , closing_price\n",
    "    , SUM(closing_price) OVER(\n",
    "        PARTITION BY ticker ORDER BY date(Date)\n",
    "    ) AS previous_close\n",
    "FROM\n",
    "    prices\n",
    "\"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>ticker</th>\n",
       "      <th>closing_price</th>\n",
       "      <th>previous_close</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-12-31</td>\n",
       "      <td>addyy</td>\n",
       "      <td>141.175522</td>\n",
       "      <td>141.175522</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2022-01-03</td>\n",
       "      <td>addyy</td>\n",
       "      <td>144.263733</td>\n",
       "      <td>285.439255</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2022-01-04</td>\n",
       "      <td>addyy</td>\n",
       "      <td>143.185318</td>\n",
       "      <td>428.624573</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2022-01-05</td>\n",
       "      <td>addyy</td>\n",
       "      <td>142.440216</td>\n",
       "      <td>571.064789</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2022-01-06</td>\n",
       "      <td>addyy</td>\n",
       "      <td>140.126511</td>\n",
       "      <td>711.191299</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>720</th>\n",
       "      <td>2022-07-25</td>\n",
       "      <td>tsla</td>\n",
       "      <td>805.299988</td>\n",
       "      <td>121508.629700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>721</th>\n",
       "      <td>2022-07-26</td>\n",
       "      <td>tsla</td>\n",
       "      <td>776.580017</td>\n",
       "      <td>122285.209717</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>722</th>\n",
       "      <td>2022-07-27</td>\n",
       "      <td>tsla</td>\n",
       "      <td>824.460022</td>\n",
       "      <td>123109.669739</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>723</th>\n",
       "      <td>2022-07-28</td>\n",
       "      <td>tsla</td>\n",
       "      <td>842.700012</td>\n",
       "      <td>123952.369751</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>724</th>\n",
       "      <td>2022-07-29</td>\n",
       "      <td>tsla</td>\n",
       "      <td>891.450012</td>\n",
       "      <td>124843.819763</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>725 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           Date ticker  closing_price  previous_close\n",
       "0    2021-12-31  addyy     141.175522      141.175522\n",
       "1    2022-01-03  addyy     144.263733      285.439255\n",
       "2    2022-01-04  addyy     143.185318      428.624573\n",
       "3    2022-01-05  addyy     142.440216      571.064789\n",
       "4    2022-01-06  addyy     140.126511      711.191299\n",
       "..          ...    ...            ...             ...\n",
       "720  2022-07-25   tsla     805.299988   121508.629700\n",
       "721  2022-07-26   tsla     776.580017   122285.209717\n",
       "722  2022-07-27   tsla     824.460022   123109.669739\n",
       "723  2022-07-28   tsla     842.700012   123952.369751\n",
       "724  2022-07-29   tsla     891.450012   124843.819763\n",
       "\n",
       "[725 rows x 4 columns]"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ex6_sql = pd.read_sql(ex6_sql_query, con=conn)\n",
    "ex6_sql"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>ticker</th>\n",
       "      <th>closing_price</th>\n",
       "      <th>expanding_sum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>580</th>\n",
       "      <td>2021-12-31</td>\n",
       "      <td>addyy</td>\n",
       "      <td>141.175522</td>\n",
       "      <td>141.175522</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>581</th>\n",
       "      <td>2022-01-03</td>\n",
       "      <td>addyy</td>\n",
       "      <td>144.263733</td>\n",
       "      <td>285.439255</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>582</th>\n",
       "      <td>2022-01-04</td>\n",
       "      <td>addyy</td>\n",
       "      <td>143.185318</td>\n",
       "      <td>428.624573</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>583</th>\n",
       "      <td>2022-01-05</td>\n",
       "      <td>addyy</td>\n",
       "      <td>142.440216</td>\n",
       "      <td>571.064789</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>584</th>\n",
       "      <td>2022-01-06</td>\n",
       "      <td>addyy</td>\n",
       "      <td>140.126511</td>\n",
       "      <td>711.191299</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>140</th>\n",
       "      <td>2022-07-25</td>\n",
       "      <td>tsla</td>\n",
       "      <td>805.299988</td>\n",
       "      <td>121508.629700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141</th>\n",
       "      <td>2022-07-26</td>\n",
       "      <td>tsla</td>\n",
       "      <td>776.580017</td>\n",
       "      <td>122285.209717</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>142</th>\n",
       "      <td>2022-07-27</td>\n",
       "      <td>tsla</td>\n",
       "      <td>824.460022</td>\n",
       "      <td>123109.669739</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>143</th>\n",
       "      <td>2022-07-28</td>\n",
       "      <td>tsla</td>\n",
       "      <td>842.700012</td>\n",
       "      <td>123952.369751</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144</th>\n",
       "      <td>2022-07-29</td>\n",
       "      <td>tsla</td>\n",
       "      <td>891.450012</td>\n",
       "      <td>124843.819763</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>725 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          Date ticker  closing_price  expanding_sum\n",
       "580 2021-12-31  addyy     141.175522     141.175522\n",
       "581 2022-01-03  addyy     144.263733     285.439255\n",
       "582 2022-01-04  addyy     143.185318     428.624573\n",
       "583 2022-01-05  addyy     142.440216     571.064789\n",
       "584 2022-01-06  addyy     140.126511     711.191299\n",
       "..         ...    ...            ...            ...\n",
       "140 2022-07-25   tsla     805.299988  121508.629700\n",
       "141 2022-07-26   tsla     776.580017  122285.209717\n",
       "142 2022-07-27   tsla     824.460022  123109.669739\n",
       "143 2022-07-28   tsla     842.700012  123952.369751\n",
       "144 2022-07-29   tsla     891.450012  124843.819763\n",
       "\n",
       "[725 rows x 4 columns]"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ex6_pandas = prices.sort_values([\"ticker\",\"Date\"]).copy()\n",
    "\n",
    "ex6_pandas[\"expanding_sum\"] = (\n",
    "    ex6_pandas.sort_values(\"Date\")\n",
    "    .groupby(\"ticker\")[\"closing_price\"]\n",
    "    .expanding(1).sum().values\n",
    ")\n",
    "ex6_pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>ticker</th>\n",
       "      <th>closing_price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-12-31</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1056.780029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2022-01-03</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1199.780029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2022-01-04</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1149.589966</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2022-01-05</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1088.119995</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2022-01-06</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1064.699951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>720</th>\n",
       "      <td>2022-07-25</td>\n",
       "      <td>addyy</td>\n",
       "      <td>90.019997</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>721</th>\n",
       "      <td>2022-07-26</td>\n",
       "      <td>addyy</td>\n",
       "      <td>83.650002</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>722</th>\n",
       "      <td>2022-07-27</td>\n",
       "      <td>addyy</td>\n",
       "      <td>83.330002</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>723</th>\n",
       "      <td>2022-07-28</td>\n",
       "      <td>addyy</td>\n",
       "      <td>85.300003</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>724</th>\n",
       "      <td>2022-07-29</td>\n",
       "      <td>addyy</td>\n",
       "      <td>86.139999</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>725 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          Date ticker  closing_price\n",
       "0   2021-12-31   tsla    1056.780029\n",
       "1   2022-01-03   tsla    1199.780029\n",
       "2   2022-01-04   tsla    1149.589966\n",
       "3   2022-01-05   tsla    1088.119995\n",
       "4   2022-01-06   tsla    1064.699951\n",
       "..         ...    ...            ...\n",
       "720 2022-07-25  addyy      90.019997\n",
       "721 2022-07-26  addyy      83.650002\n",
       "722 2022-07-27  addyy      83.330002\n",
       "723 2022-07-28  addyy      85.300003\n",
       "724 2022-07-29  addyy      86.139999\n",
       "\n",
       "[725 rows x 3 columns]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prices"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### rolling"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    0\n",
      "dtype: int64\n",
      "0    0\n",
      "1    1\n",
      "dtype: int64\n",
      "0    0\n",
      "1    1\n",
      "2    2\n",
      "dtype: int64\n",
      "1    1\n",
      "2    2\n",
      "3    3\n",
      "dtype: int64\n",
      "2    2\n",
      "3    3\n",
      "4    4\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "s = pd.Series(range(5))\n",
    "for window in s.rolling(window=3):\n",
    "    print(window)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    NaN\n",
       "1    NaN\n",
       "2    1.0\n",
       "3    2.0\n",
       "4    3.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s.rolling(window=3).mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "tsla_price = prices.query('ticker == \"tsla\"')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>ticker</th>\n",
       "      <th>closing_price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-12-31</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1056.780029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2022-01-03</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1199.780029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2022-01-04</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1149.589966</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2022-01-05</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1088.119995</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2022-01-06</td>\n",
       "      <td>tsla</td>\n",
       "      <td>1064.699951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>140</th>\n",
       "      <td>2022-07-25</td>\n",
       "      <td>tsla</td>\n",
       "      <td>805.299988</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141</th>\n",
       "      <td>2022-07-26</td>\n",
       "      <td>tsla</td>\n",
       "      <td>776.580017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>142</th>\n",
       "      <td>2022-07-27</td>\n",
       "      <td>tsla</td>\n",
       "      <td>824.460022</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>143</th>\n",
       "      <td>2022-07-28</td>\n",
       "      <td>tsla</td>\n",
       "      <td>842.700012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144</th>\n",
       "      <td>2022-07-29</td>\n",
       "      <td>tsla</td>\n",
       "      <td>891.450012</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>145 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          Date ticker  closing_price\n",
       "0   2021-12-31   tsla    1056.780029\n",
       "1   2022-01-03   tsla    1199.780029\n",
       "2   2022-01-04   tsla    1149.589966\n",
       "3   2022-01-05   tsla    1088.119995\n",
       "4   2022-01-06   tsla    1064.699951\n",
       "..         ...    ...            ...\n",
       "140 2022-07-25   tsla     805.299988\n",
       "141 2022-07-26   tsla     776.580017\n",
       "142 2022-07-27   tsla     824.460022\n",
       "143 2022-07-28   tsla     842.700012\n",
       "144 2022-07-29   tsla     891.450012\n",
       "\n",
       "[145 rows x 3 columns]"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tsla_price"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6      1092.01\n",
       "7      1093.10\n",
       "8      1079.73\n",
       "9      1062.87\n",
       "10     1057.37\n",
       "        ...   \n",
       "140     765.44\n",
       "141     773.49\n",
       "142     788.18\n",
       "143     803.34\n",
       "144     824.62\n",
       "Name: closing_price, Length: 139, dtype: object"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tsla_price['closing_price'].rolling(7).mean().dropna().transform(lambda x: \"{0:.02f}\".format(x))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### expanding"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6      1092.01\n",
       "7      1088.56\n",
       "8      1090.52\n",
       "9      1084.62\n",
       "10     1081.44\n",
       "        ...   \n",
       "140     861.76\n",
       "141     861.16\n",
       "142     860.91\n",
       "143     860.78\n",
       "144     860.99\n",
       "Name: closing_price, Length: 139, dtype: object"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tsla_price['closing_price'].expanding(7).mean().dropna().transform(lambda x: \"{0:.02f}\".format(x))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### pct_change"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0           NaN\n",
       "1      0.135317\n",
       "2     -0.041833\n",
       "3     -0.053471\n",
       "4     -0.021523\n",
       "         ...   \n",
       "140   -0.013995\n",
       "141   -0.035664\n",
       "142    0.061655\n",
       "143    0.022124\n",
       "144    0.057850\n",
       "Name: closing_price, Length: 145, dtype: float64"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tsla_price['closing_price'].pct_change()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ewm\n",
    "\n",
    "\n",
    "> An exponential moving average is a type of moving average that gives more weight to recent observations, which means it’s able to capture recent trends more quickly.\n",
    "\n",
    "- com ：  float，可选\n",
    "\n",
    "根据质心指定衰减， α=1/(1+com), for com≥0。\n",
    "\n",
    "- span ：  float，可选\n",
    "\n",
    "根据范围指定衰减， α=2/(span+1), for span≥1。\n",
    "\n",
    "- halflife ：  float，可选\n",
    "\n",
    "根据半衰期指定衰减， α=1−exp(log(0.5)/halflife),forhalflife>0。\n",
    "\n",
    "- alpha ：  float，可选\n",
    "\n",
    "直接指定平滑系数α， 0<α≤1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0      1056.780029\n",
       "1      1146.155029\n",
       "2      1147.907548\n",
       "3      1120.431650\n",
       "4      1096.259331\n",
       "          ...     \n",
       "140     793.673755\n",
       "141     786.836260\n",
       "142     801.885765\n",
       "143     818.211464\n",
       "144     847.506883\n",
       "Name: closing_price, Length: 145, dtype: float64"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tsla_price['closing_price'].ewm(span = 4).mean()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
